Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
NOTES_DIRNoNotes storage directory~/notes
NOTES_AUTO_INDEXNoAuto-index on startuptrue
NOTES_GIT_ENABLEDNoEnable git versioningtrue
VECTOR_QDRANT_URLNoQdrant vector database URLhttp://localhost:6333
NOTES_GIT_USER_NAMENoGit commit authorNotes MCP
NOTES_GIT_USER_EMAILNoGit commit emailnotes@localhost
VECTOR_EMBEDDING_URLNoOpenAI-compatible embedding API URLhttp://localhost:8080
VECTOR_EMBEDDING_MODELYesEmbedding model name (no default provided)
NOTES_COLLECTION_PREFIXNoQdrant collection prefixnotes

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
create_noteA

Create a new note with auto-generated UUID.

Args: title: Note title content: Note body content (markdown) tags: Optional list of tags (lowercase, hyphenated) category: Optional category path (e.g., "work/projects")

Returns: Created note as dict

read_noteB

Read a note by its UUID.

Args: note_id: Note UUID string

Returns: Note as dict

update_noteA

Update an existing note. Only provided fields are updated.

Args: note_id: Note UUID string title: New title (optional, may cause file rename) content: New body content (optional) tags: New tags (optional, pass empty list to clear) category: New category (optional, may cause file move, pass empty string to clear)

Returns: Updated note as dict

delete_noteA

Delete a note. The note is removed from the filesystem and search index, but remains recoverable from git history.

Args: note_id: Note UUID string

Returns: Success status

search_notesA

Hybrid semantic + keyword search across all notes.

Query syntax supports filters:

  • tag:tagname - Filter by tag

  • category:path - Filter by category

  • after:YYYY-MM-DD - Created after date

  • before:YYYY-MM-DD - Created before date

  • title:text - Title contains text

Args: query: Search query with optional filters limit: Max results (default 10, max 100) tags: Additional tag filters category: Additional category filter after: Created after date (ISO format) before: Created before date (ISO format)

Returns: List of search results

list_notesA

List notes with optional filtering.

Args: tags: Filter by tags (all must match) category: Filter by category prefix sort_by: Sort field - "modified" (default), "created", or "title" limit: Max results (default 50, max 100)

Returns: List of note summaries, or a single-item list with an error dict if sort_by is not one of the supported fields.

find_similar_notesA

Find notes semantically similar to the given note.

Args: note_id: Source note UUID string limit: Max results (default 5, max 100)

Returns: List of similar notes

get_note_historyA

Get version history for a note from git.

Uses --follow to track history across file moves/renames.

Args: note_id: Note UUID string limit: Max versions to return (default 10, max 100)

Returns: List of version info

restore_note_versionA

Restore a note to a previous version (creates new commit).

Args: note_id: Note UUID string version_id: Git commit SHA to restore from

Returns: Restored note

get_note_linksA

Get incoming and outgoing links for a note.

Args: note_id: Note UUID string

Returns: NoteLinks with outgoing, incoming (backlinks), and broken links

list_tagsA

List all tags with note counts.

Returns: List of tag info

rename_tagA

Rename a tag across all notes.

Args: old_tag: Tag to rename new_tag: New tag name

Returns: Count of notes updated, or error dict if validation fails

merge_tagsA

Merge multiple tags into one.

Args: source_tags: Tags to merge from target_tag: Tag to merge into

Returns: Count of notes updated, or error dict if validation fails

list_categoriesA

List all categories with note counts and hierarchy.

Returns: Category tree

move_categoryA

Move/rename a category.

Args: old_path: Current category path new_path: New category path

Returns: Count of notes updated

reindex_notesA

Force reindex all notes (useful after manual file edits).

Returns: Index status

check_note_healthA

Check health of all notes, reporting parse errors and issues.

Returns: Health report with total notes, parse errors, and recommendations

add_glossary_entryA

Add a new glossary entry.

Args: term: Canonical term (e.g., "USAF") expansion: Full expansion (e.g., "United States Air Force") definition: Detailed definition domain: Optional category (e.g., "military", "tech", "finance") aliases: Optional alternative terms that point to this entry

Returns: Created entry as dict, or error dict for blank/duplicate input

lookup_termA

Exact lookup by term or alias (case-insensitive).

Args: term: Term to look up (e.g., "usaf", "USAF", "US Air Force")

Returns: Glossary entry if found, or error dict

search_glossaryA

Semantic search for glossary entries.

Args: query: Natural language search query domain: Optional domain filter limit: Max results (default 10, max 100)

Returns: List of matching entries with relevance scores, or error dict

list_glossaryA

List all glossary entries with optional domain filter.

Args: domain: Optional domain filter limit: Max results (default 50, max 100)

Returns: List of glossary entry summaries

update_glossary_entryA

Update an existing glossary entry. Only provided fields are updated.

Args: term_or_id: Term (case-insensitive) or UUID to identify the entry term: New canonical term (optional) expansion: New expansion (optional) definition: New definition (optional) domain: New domain (optional, pass "" or null to clear) aliases: New aliases (optional, pass [] to clear)

Returns: Updated entry as dict

delete_glossary_entryA

Delete a glossary entry by term or UUID.

Args: term_or_id: Term (case-insensitive) or UUID string

Returns: Success status or error

add_factA

Add a new fact (subject-predicate-object triple).

Args: subject: Subject entity name (e.g., "John Smith") predicate: Relationship type (e.g., "works_at", "served_in") object: Object entity name (e.g., "Acme Corp") subject_type: Type of subject (e.g., "person", "organization") object_type: Type of object (e.g., "organization", "military_unit") context: Optional context description (e.g., "as squad leader") confidence: Confidence level 0.0-1.0 (1.0 = verified/manual) valid_from: Start date of validity (ISO format: YYYY-MM-DD) valid_to: End date of validity (ISO format: YYYY-MM-DD) source_type: Source type ("note", "document", "glossary", "manual") source_id: Source UUID (for notes/glossary) source_path: Source path (for documents) source_hash: Content hash (for documents) source_location: Location within source (e.g., "page 3")

Returns: Created fact as dict

add_facts_batchA

Add multiple facts, committing each newly created fact independently.

Args: facts: List of fact dicts, each with same fields as add_fact: - subject, predicate, object (required) - subject_type, object_type, context, confidence, valid_from, valid_to - source_type, source_id, source_path, source_hash, source_location

Returns: Summary dict with added count, duplicates count, and any errors

update_factA

Update an existing fact's metadata.

Note: Subject, predicate, and object are immutable (delete and recreate if needed).

Args: fact_id: Fact UUID string context: New context description (omit or null leaves it unchanged; pass an empty string "" to set it blank) confidence: New confidence level 0.0-1.0 valid_from: New start date in ISO format (omit or null leaves it unchanged; pass an empty string "" to clear it) valid_to: New end date in ISO format (omit or null leaves it unchanged; pass an empty string "" to clear it)

Returns: Updated fact as dict

delete_factC

Delete a fact and its sources.

Args: fact_id: Fact UUID string

Returns: Success status

query_factsB

Query facts by various criteria.

Args: subject: Filter by subject (case-insensitive) predicate: Filter by predicate (case-insensitive) object: Filter by object (case-insensitive) subject_type: Filter by subject type object_type: Filter by object type min_confidence: Minimum confidence threshold valid_at: Filter by validity date (ISO format: YYYY-MM-DD) limit: Maximum results (1-100, default 50)

Returns: List of matching facts

get_entityA

Get all facts involving an entity (as subject or object).

Args: name: Entity name (case-insensitive) entity_type: Optional entity type filter

Returns: Dict with entity info and related facts

list_factsB

List facts as lightweight summaries.

Args: limit: Maximum results (1-100, default 50) subject_type: Filter by subject type object_type: Filter by object type predicate: Filter by predicate

Returns: List of fact summaries

search_factsA

Semantic search across indexed facts.

Args: query: Natural language search query limit: Maximum results (1-100, default 10)

Returns: List of matching facts with scores

index_factsB

Index all facts for semantic search.

Args: force: If True, reindex all facts. If False, only index new facts.

Returns: Indexing result with counts

find_connectionsA

Find connections between entities using BFS graph traversal.

Discovers how entities are related through chains of facts.

Args: source_entity: Starting entity name target_entity: Target entity to find path to (optional) If None, returns all reachable entities up to max_depth source_type: Type of source entity (optional, for disambiguation) target_type: Type of target entity (optional, for disambiguation) max_depth: Maximum path length (1-10, default 3) limit: Maximum paths to return (1-100, default 10)

Returns: List of connection paths, each containing: - path: List of facts connecting the entities - entities: List of entity names in the path

get_neighborsA

Get immediate neighbors of an entity in the fact graph.

Returns all entities directly connected by a single fact.

Args: entity: Entity name to get neighbors for entity_type: Type filter (optional, for disambiguation)

Returns: List of neighbors with: - entity: Neighbor entity name - type: Neighbor entity type - predicate: Relationship predicate - direction: 'outgoing' (entity is subject) or 'incoming' (entity is object) - fact_id: UUID of connecting fact

get_facts_with_stale_sourcesA

Get facts with stale (deleted or modified) sources.

Useful for identifying facts that may need review or re-verification.

Args: status: Filter by source status: "deleted", "modified", or "all" (default) limit: Max results (default 50, max 100)

Returns: List of facts with stale sources, or a single-item list with an error dict if status is not one of the supported values.

get_source_statisticsA

Get statistics about fact source integrity.

Returns counts of sources by status across all facts.

Returns: Dict with source counts by status and integrity score

check_fact_integrityA

Check integrity of a specific fact's sources.

Returns breakdown of source statuses for the fact.

Args: fact_id: Fact UUID string

Returns: IntegrityCheckResult with source status breakdown

revalidate_fact_sourcesA

Reset modified/deleted sources back to active after re-verification.

Use this after manually verifying that sources are still valid.

Args: source_id: Optional source UUID to revalidate (e.g., a note or glossary entry UUID) source_type: Optional source type filter ("note", "glossary", "document")

Returns: Count of sources revalidated

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
get_notes_indexFull index of all notes.
get_tags_resourceAll tags with counts.
get_categories_resourceCategory hierarchy with counts.
get_recent_notesRecently modified notes (last 20).
get_orphan_notesNotes with no incoming links.
get_broken_links_resourceAll broken [[uuid]] references.
get_parse_errors_resourceNotes that failed to parse (corrupted or malformed).

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/michaelkrauty/mcp-notes'

If you have feedback or need assistance with the MCP directory API, please join our Discord server