hjarni
Server Details
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
- Status
- Unhealthy
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- hjarni/hjarni-mcp
- GitHub Stars
- 0
- Server Listing
- Hjarni MCP Server
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
- Changed
notes-update1 field changed- changed
Input schema / properties / archived / descriptionPrevious value: -"Archive (true) or unarchive (false) the note. Personal notes only."New value: +"Archive (true) or unarchive (false) the note. Works on your own personal notes and on team notes where you have the editor role; notes in shared containers can only be archived by their owner."
1 tool update
- Added
nudges-dismiss
1 tool update
- Added
teams-create
1 tool update
- Added
teams-invite
3 tool updates
- Changed
containers-create2 fields changed- changed
Input schema / properties / parent_id / descriptionPrevious value: -"Parent container ID for nesting. Must belong to the same scope (personal or team) as the new container."New value: +"Parent container ID for nesting, or null/omitted for a top-level container. Must belong to the same scope (personal or team) as the new container." - changed
Input schema / properties / parent_id / typePrevious value: -"integer"New value: +[ + "integer", + "null" +]
- Changed
containers-update2 fields changed- changed
Input schema / properties / parent_id / descriptionPrevious value: -"New parent container ID (null for root). Must belong to the same scope as the container."New value: +"New parent container ID, or null to move the container to root level. Must belong to the same scope as the container." - changed
Input schema / properties / parent_id / typePrevious value: -"integer"New value: +[ + "integer", + "null" +]
- Changed
notes-update1 field changed- changed
Input schema / properties / container_id / typePrevious value: -"integer"New value: +[ + "integer", + "null" +]
5 tool updates
- Changed
notes-delete1 field changed- changed
Input schema / descriptionPrevious value: -"Permanently delete a note. This action cannot be undone."New value: +"Move a note to Trash (recoverable with notes-restore until its purge date)."
- Added
notes-history - Changed
notes-list2 fields changed- changed
Input schema / properties / scope / descriptionPrevious value: -"Filter scope (default: active). 'inbox' and 'favorited' only for personal notes."New value: +"Filter scope (default: active). 'inbox' and 'favorited' only for personal notes; 'trashed' lists the recoverable Trash — restore an entry with notes-restore." - changed
Input schema / properties / scope / enumPrevious value: -[ - "active", - "archived", - "inbox", - "favorited" -]New value: +[ + "active", + "archived", + "inbox", + "favorited", + "trashed" +]
- Added
notes-restore - Added
notes-revert
5 tool updates
- Changed
containers-create1 field changed- added
Input schema / properties / negative_spaceAdded value: +{ + "description": "What does NOT belong in this folder (e.g. 'No meeting notes, those go in Meetings'). Helps route notes away from the wrong place.", + "type": [ + "string", + "null" + ] +}
- Changed
containers-update1 field changed- added
Input schema / properties / negative_spaceAdded value: +{ + "description": "What does NOT belong in this folder, or null to clear it.", + "type": [ + "string", + "null" + ] +}
- Changed
notes-create1 field changed- added
Input schema / properties / review_afterAdded value: +{ + "description": "Optional ISO 8601 datetime after which the note should be treated as stale. Use for time-boxed notes (e.g. '2026-12-31').", + "type": [ + "string", + "null" + ] +}
- Changed
notes-list1 field changed- added
Input schema / properties / staleAdded value: +{ + "description": "Filter to notes whose freshness is stale — past their review_after date or unverified beyond the freshness window (default: not filtered)", + "type": "boolean" +}
- Changed
notes-update2 fields changed- added
Input schema / properties / review_afterAdded value: +{ + "description": "ISO 8601 datetime after which the note should be treated as stale (time-boxing), or null to clear it.", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / verifiedAdded value: +{ + "description": "Pass true to mark the note re-confirmed as still true as of now (the 'mark verified' affordance). Refreshes verified_at and clears 'stale' status. Only send after the user has confirmed the note is still accurate.", + "type": "boolean" +}
1 tool update
- Added
tags-manage
1 tool update
- Changed
notes-update1 field changed- changed
Input schema / properties / container_id / descriptionPrevious value: -"Move to this container"New value: +"Folder (container) id to move the note into; pass null to move it to the inbox (remove it from its folder)"
1 tool update
- Changed
notes-update12 fields changed- changed
Input schema / descriptionPrevious value: -"Update a note. Supports partial updates — only provided fields are changed. Body-mutation modes (body, append_body, insert_body, replace_find) are mutually exclusive."New value: +"Update a note. Supports partial updates — only provided fields are changed. The body-mutation modes (body, append_body, insert_body, replace_find, replace_section, append_to_section, rename_heading, check_item, uncheck_item) are mutually exclusive — supply at most one per call." - changed
Input schema / properties / append_body / descriptionPrevious value: -"Content to append to the existing body. Mutually exclusive with body, insert_body, and replace_find."New value: +"Content to append to the existing body. Mutually exclusive with the other body-mutation modes." - added
Input schema / properties / append_to_sectionAdded value: +{ + "description": "Heading to append content to (with or without leading '#'). Adds section_body at the END of that section — the safe way to 'insert under a heading'. Pair with section_body. Heading must match exactly one.", + "type": "string" +} - changed
Input schema / properties / body / descriptionPrevious value: -"New body content — full replacement. Mutually exclusive with append_body, insert_body, and replace_find. Pair with expected_lock_version for concurrent-edit safety."New value: +"New body content — full replacement. Mutually exclusive with the other body-mutation modes. Pair with expected_lock_version for concurrent-edit safety." - added
Input schema / properties / check_itemAdded value: +{ + "description": "Text of a checklist item to tick (set to '[x]'). Matched case- and whitespace-insensitively; a leading bullet/checkbox in the text is ignored. Must match exactly one item.", + "type": "string" +} - changed
Input schema / properties / insert_body / descriptionPrevious value: -"Text to insert. Must be paired with either insert_after or insert_before. Mutually exclusive with body, append_body, and replace_find."New value: +"Text to insert. Must be paired with either insert_after or insert_before. Mutually exclusive with the other body-mutation modes." - added
Input schema / properties / new_headingAdded value: +{ + "description": "New heading text for rename_heading. The original level is preserved unless this carries its own leading '#' markers.", + "type": "string" +} - added
Input schema / properties / rename_headingAdded value: +{ + "description": "Heading to rename (with or without leading '#'). Pair with new_heading. Heading must match exactly one.", + "type": "string" +} - changed
Input schema / properties / replace_find / descriptionPrevious value: -"Snippet to find in the existing body. Must match exactly once. Mutually exclusive with body, append_body, and insert_body."New value: +"Snippet to find in the existing body. Must match exactly once. Mutually exclusive with the other body-mutation modes." - added
Input schema / properties / replace_sectionAdded value: +{ + "description": "Heading whose section content should be replaced (with or without leading '#', e.g. '## Status' or 'Status'). Replaces everything under the heading up to the next same-or-higher-level heading, keeping the heading line. Pair with section_body. Heading must match exactly one.", + "type": "string" +} - added
Input schema / properties / section_bodyAdded value: +{ + "description": "The content for replace_section / append_to_section. Required when either is given.", + "type": "string" +} - added
Input schema / properties / uncheck_itemAdded value: +{ + "description": "Text of a checklist item to untick (set to '[ ]'). Same matching rules as check_item.", + "type": "string" +}
1 tool update
- Changed
notes-create1 field changed- changed
Input schema / properties / summary / descriptionPrevious value: -"Short summary of the note"New value: +"A 2-3 sentence summary of the note. Always provide one."
1 tool update
- Changed
notes-update1 field changed- changed
Input schema / properties / replace_with / descriptionPrevious value: -"Text to replace replace_find with. Use an empty string to delete the matched snippet."New value: +"Optional replacement for replace_find. Omit it (or pass an empty string) to delete the matched snippet."
1 tool update
- Changed
instructions-get3 fields changed- added
Input schema / properties / level / defaultAdded value: +"brain" - changed
Input schema / properties / level / descriptionPrevious value: -"Instruction level: 'brain' (global), 'personal_root', 'container', or 'team' (required)"New value: +"Instruction level: 'brain' (global), 'personal_root', 'container', or 'team'. Defaults to 'brain' if omitted or blank." - changed
Input schema / requiredPrevious value: -[ - "level" -]New value: +[]
1 tool update
- Changed
notes-update2 fields changed- changed
Input schema / properties / body / descriptionPrevious value: -"New body content — full replacement. Mutually exclusive with append_body, insert_body, and replace_find."New value: +"New body content — full replacement. Mutually exclusive with append_body, insert_body, and replace_find. Pair with expected_lock_version for concurrent-edit safety." - added
Input schema / properties / expected_lock_versionAdded value: +{ + "description": "Optional concurrent-edit guard. Pass the lock_version you saw when you last read the note; if it doesn't match the current version, the update is rejected and you should re-read and re-apply. Checked whenever supplied — covers title, summary, container_id, body, anything else. Surgical body edits without this param still work and remain anchor-safe; supply it any time you want a stale-write guard for the other fields too.", + "type": "integer" +}
1 tool update
- Added
me
1 tool update
- Added
feedback-submit
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
Google Keep-style notes app with an MCP server for AI agents to read/write notes.
Shared Markdown notes for MCP-compatible AI tools.
MCP-native notes and memory for ChatGPT, Claude, and other AI tools.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA local-first MCP server that gives AI assistants long-term memory by storing, searching, and recalling notes as Markdown files on your machine.14MIT
- AlicenseAqualityAmaintenanceMCP server for managing a local, domain-agnostic knowledge base using Markdown notes with frontmatter. Enables AI agents to capture, read, search, link, and maintain notes with atomic writes and privacy controls.13MIT
- AlicenseAqualityBmaintenanceAn MCP server that gives AI models a persistent notebook backed by a folder of Markdown files, with tools to discover, read, write, edit, and delete notes.9MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for AI agents to read, write, and organize notes in a local-first, human-in-the-loop note-taking app.62MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each tool targets a distinct resource and action (e.g., containers-create, notes-get, files-attach). There is no overlap or ambiguity; even similar operations like notes-list and search are clearly differentiated by scope and parameters.
Most tools follow the noun-verb pattern (e.g., containers-create, notes-update, tags-list). Two tools ('search' and 'me') deviate from this pattern, which is a minor inconsistency but does not cause confusion.
33 tools is on the higher end for a single server, but each tool serves a unique purpose within the note-taking domain (notes, containers, tags, files, teams, etc.). The count is justified by the system's complexity and remains manageable.
The tool surface covers CRUD and lifecycle operations for all major entities (notes, containers, tags, files, teams), plus search, dashboard, instructions, feedback, and user profile. There are no obvious gaps that would hinder typical workflows.