hjarni avatar

Hjarni

hjarni/hjarni-mcp

A hosted note-taking system that gives Claude and ChatGPT direct access to your Markdown notes through a remote MCP server. Connect via OAuth in under two minutes with no local setup. Exposes tools for full CRUD on notes, folders, and tags, plus full-text search, wiki-style bidirectional linking, and file attachments. Each folder can have custom AI instructions that guide how the agent works with notes inside it. The dashboard tool gives agents an overview of your knowledge base structure. Works with Claude Desktop, Claude.ai, ChatGPT, and any client supporting streamable HTTP transport. Useful when you want your AI to remember things across conversations and actively manage a personal knowledge base instead of just answering one-off questions.

tools
24
transport
HTTP
last updated
Apr 1, 2026

Tools

24 tools

Public tool metadata for what this MCP can expose to an agent.

dashboard-getGet an overview of the Second Brain: counts of notes, containers, tags, inbox items, and recent notes.

Get an overview of the Second Brain: counts of notes, containers, tags, inbox items, and recent notes.

No parameter schema in public metadata yet.

searchUnified search across notes, containers, and tags. Returns results grouped by type. Use the types parameter to search only specific types (e.g., types: ['notes'] for note-only search). Supports full-text search with snippets, all note filters (container, tags, include_nested,...8 params

Unified search across notes, containers, and tags. Returns results grouped by type. Use the types parameter to search only specific types (e.g., types: ['notes'] for note-only search). Supports full-text search with snippets, all note filters (container, tags, include_nested,...

Parameters* required
container_idinteger
Filter note results to this container (ignored when search_scope is 'all')
include_nestedboolean
Include notes from sub-containers when container_id is set (default: false)
querystring
Search query string
scopestring
Search active or archived notes (default: active)one of active · archived
search_scopestring
Search scope: 'all' (default, personal + all teams), 'personal' (personal notes only), or 'team:<id>' (specific team). Applies to note results.
tag_idsarray
Filter note results to notes with ALL these tags (by ID)
tagsarray
Filter note results to notes with ALL these tags (by name)
typesarray
Which types to search. Defaults to all three: ['notes', 'containers', 'tags']
notes-listList notes with optional filtering and sorting. Returns paginated results. Use team_id to list notes in a team. Use container_id to list notes in a specific container (with include_nested for sub-containers). Use tag/tags/tag_ids to filter by tags.10 params

List notes with optional filtering and sorting. Returns paginated results. Use team_id to list notes in a team. Use container_id to list notes in a specific container (with include_nested for sub-containers). Use tag/tags/tag_ids to filter by tags.

Parameters* required
container_idinteger
Filter by container ID
include_nestedboolean
Include notes from sub-containers when container_id is set (default: false)
pageinteger
Page number (default: 1)
per_pageinteger
Results per page, max 100 (default: 25)
scopestring
Filter scope (default: active). 'inbox' and 'favorited' only for personal notes.one of active · archived · inbox · favorited
sortstring
Sort order: 'recent' (updated_at desc, default), 'oldest' (updated_at asc), or 'title' (alphabetical)one of recent · oldest · title
tagstring
Filter by tag name
tag_idsarray
Filter to notes with ALL these tags by ID (AND logic)
tagsarray
Filter to notes with ALL these tags by name (AND logic)
team_idinteger
List notes in this team instead of personal notes
notes-getGet a single note by ID, including its full body content, tags, container, linked notes, and file attachments.1 params

Get a single note by ID, including its full body content, tags, container, linked notes, and file attachments.

Parameters* required
idinteger
Note ID
notes-createCreate a new note. The body supports Markdown and wiki-links: use [[id:Note Title]] to link to other notes. Use team_id to create in a team.7 params

Create a new note. The body supports Markdown and wiki-links: use [[id:Note Title]] to link to other notes. Use team_id to create in a team.

Parameters* required
bodystring
Note body content (Markdown with [[id:Note Title]] wiki-links)
container_idinteger
Container ID to place the note in
source_urlstring
Source URL reference
summarystring
Short summary of the note
tag_liststring
Comma-separated list of tags
team_idinteger
Create note in this team instead of personal space
titlestring
Note title
notes-updateUpdate an existing note. Supports updating content, moving to a container, changing tags, archiving (archived: true/false), and favoriting (favorited: true/false).9 params

Update an existing note. Supports updating content, moving to a container, changing tags, archiving (archived: true/false), and favoriting (favorited: true/false).

Parameters* required
archivedboolean
Archive (true) or unarchive (false) the note. Personal notes only.
bodystring
New body content (Markdown with [[id:Note Title]] wiki-links)
container_idinteger
Move to this container
favoritedboolean
Favorite (true) or unfavorite (false) the note. Personal and team notes.
idinteger
Note ID
source_urlstring
New source URL
summarystring
New summary
tag_liststring
New comma-separated tag list
titlestring
New title
notes-deletePermanently delete a note.1 params

Permanently delete a note.

Parameters* required
idinteger
Note ID
containers-listList containers (folders) for organizing notes. By default returns root-level personal containers. Use team_id to list containers in a team.4 params

List containers (folders) for organizing notes. By default returns root-level personal containers. Use team_id to list containers in a team.

Parameters* required
pageinteger
Page number
per_pageinteger
Results per page
scopestring
Filter scope (default: roots). 'archived' only for personal containers.one of roots · all · archived
team_idinteger
List containers in this team instead of personal containers
containers-getGet a single container by ID, including its LLM instructions if set. Use include_tree to also get ancestors and children.2 params

Get a single container by ID, including its LLM instructions if set. Use include_tree to also get ancestors and children.

Parameters* required
idinteger
Container ID
include_treeboolean
Include ancestors and children arrays (default: false)
containers-createCreate a new container (folder) for organizing notes.3 params

Create a new container (folder) for organizing notes.

Parameters* required
descriptionstring
Container description
namestring
Container name
parent_idinteger
Parent container ID for nesting
containers-updateUpdate an existing container (rename, change description, move to a different parent, or set display position).5 params

Update an existing container (rename, change description, move to a different parent, or set display position).

Parameters* required
descriptionstring
New description
idinteger
Container ID
namestring
New name
parent_idinteger
New parent container ID (null for root)
positioninteger
Display order position (lower numbers appear first)
tags-listList all tags.2 params

List all tags.

Parameters* required
pageinteger
Page number
per_pageinteger
Results per page
tags-createCreate a new tag.1 params

Create a new tag.

Parameters* required
namestring
Tag name
teams-listList all teams the user is a member of.

List all teams the user is a member of.

No parameter schema in public metadata yet.

teams-getGet team details including recent notes.1 params

Get team details including recent notes.

Parameters* required
idinteger
Team ID
instructions-getGet LLM instructions at the specified level. Use level 'brain' to get global instructions (call early in conversations). Use 'personal_root' for personal space, 'container' for a specific container (includes inheritance chain), or 'team' for team instructions.2 params

Get LLM instructions at the specified level. Use level 'brain' to get global instructions (call early in conversations). Use 'personal_root' for personal space, 'container' for a specific container (includes inheritance chain), or 'team' for team instructions.

Parameters* required
idinteger
Container ID or Team ID (required for 'container' and 'team' levels)
levelstring
Instruction level: 'brain' (global), 'personal_root', 'container', or 'team'one of brain · personal_root · container · team
instructions-updateUpdate LLM instructions at the specified level. Use 'brain' for global, 'personal_root' for personal space, 'container' for a specific container, or 'team' for team instructions.3 params

Update LLM instructions at the specified level. Use 'brain' for global, 'personal_root' for personal space, 'container' for a specific container, or 'team' for team instructions.

Parameters* required
idinteger
Container ID or Team ID (required for 'container' and 'team' levels)
instructionsstring
The full updated instructions text. This replaces the existing instructions entirely.
levelstring
Instruction level to updateone of brain · personal_root · container · team
links-manageCreate or remove a bidirectional link between two notes.3 params

Create or remove a bidirectional link between two notes.

Parameters* required
actionstring
Action: 'link' to create a link, 'unlink' to remove itone of link · unlink
source_note_idinteger
First note ID
target_note_idinteger
Second note ID
files-attachAttach a file to a note. Send the file contents as a base64-encoded string.5 params

Attach a file to a note. Send the file contents as a base64-encoded string.

Parameters* required
content_typestring
MIME type (e.g. application/pdf). Defaults to application/octet-stream
datastring
Base64-encoded file contents
descriptionstring
Optional file description
filenamestring
Filename (e.g. report.pdf)
idinteger
Note ID
files-attach_from_urlFetch a file from a URL and attach it to a note. Follows one redirect.5 params

Fetch a file from a URL and attach it to a note. Follows one redirect.

Parameters* required
content_typestring
Override MIME type (default: from HTTP response)
descriptionstring
Optional file description
filenamestring
Override filename (default: derived from URL)
idinteger
Note ID
urlstring
URL to fetch the file from
files-removeRemove a file attachment from a note.2 params

Remove a file attachment from a note.

Parameters* required
file_idinteger
File ID (from notes-get response)
note_idinteger
Note ID
files-create_upload_urlGenerate a one-time upload URL for attaching a file to a note. Share this URL with the user so they can upload their file directly — the file bypasses the conversation and goes straight to Second Brain, saving tokens. The link expires after 30 minutes. Use files-check_upload t...2 params

Generate a one-time upload URL for attaching a file to a note. Share this URL with the user so they can upload their file directly — the file bypasses the conversation and goes straight to Second Brain, saving tokens. The link expires after 30 minutes. Use files-check_upload t...

Parameters* required
descriptionstring
Optional file description
note_idinteger
Note ID to attach the file to
files-check_uploadCheck the status of a file upload link created by files-create_upload_url. Returns 'pending' (user hasn't uploaded yet), 'completed' (file attached successfully), or 'expired' (link timed out).1 params

Check the status of a file upload link created by files-create_upload_url. Returns 'pending' (user hasn't uploaded yet), 'completed' (file attached successfully), or 'expired' (link timed out).

Parameters* required
tokenstring
Upload token (from files-create_upload_url response)
files-get_download_urlGet a temporary download URL for a file attached to a note. Share the URL with the user so they can download the file in their browser. The URL expires after a few minutes.2 params

Get a temporary download URL for a file attached to a note. Share the URL with the user so they can download the file in their browser. The URL expires after a few minutes.

Parameters* required
file_idinteger
File ID (from notes-get response)
note_idinteger
Note ID

Sponsors

Readme

Hjarni

Hjarni

Markdown notes for you, ChatGPT, and Claude.
An official, hosted MCP server for the same notes you read and edit.

Website · Docs · Blog


What it does

Hjarni is a Markdown note-taking app with an official, hosted MCP server at https://hjarni.com/mcp. Write and edit notes in the browser or Hjarni's iPhone, iPad, Apple Silicon Mac, and Android apps. Connect ChatGPT, Claude, or another compatible MCP client to search, read, create, update, and organize those same saved notes.

Use folders, tags, wiki-links, and instructions to keep a project brief, research notebook, or second brain current across assistants. You can review saved changes in note history, restore an earlier body, and export active notes as Markdown with attachments.


View the full README on GitHub

Details

Repository
github.com/hjarni/hjarni-mcp
Category
Documents & Knowledge
Transport
HTTP
Registry
MCP registry, active

Related Documents & Knowledge MCP servers

View all
1spocont avatarDocu-Scan MCPcom.spocont/docu-scanPDF and document extraction via Google Document AI. Free trial available.0stars
2ayo-nci avatarBulkrenderayo-nci/bulkrender-mcpGenerate DOCX and PDF documents from AI assistants using BulkRender templates.0stars
3igormilovanovic avatarMCP Data Converterio.github.igormilovanovic/data-converterConvert between 200+ format pairs: JSON, CSV, XML, YAML, PDF, Excel, DOCX and more.0stars
4traviseric avatarTeneo Book Generationtraviseric/teneo-book-mcpPublish-ready nonfiction books from a topic: manuscript, cover, PDF/EPUB/DOCX. Free outline to try.0stars
5lakshgk avatarDistill Mcplakshgk/distill-mcpConvert PDF, DOCX, XLSX, PPTX, HTML, audio to token-efficient Markdown for any MCP client.0stars
6mdmagic-mcp avatarMdmagic Mcp Servermdmagic-mcp/mdmagic-mcp-serverUse your own Word templates to convert Markdown → DOCX/PDF/HTML from any MCP-compatible AI.0stars