# MCP Tools Reference

> Current MCP tool reference for Basic Memory local and cloud usage.

<note>

This is a technical reference for developers and AI integrations. For a conceptual overview of what Basic Memory can do, see [What is Basic Memory](/start-here/what-is-basic-memory).

</note>

This page lists core Basic Memory MCP tools and their current parameters.

<tip>

Project resolution order is: constrained project env -> explicit `project` parameter -> `default_project` fallback.

</tip>

### Common parameters

Most tools accept these optional parameters. They are **not** repeated in every table below.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Default
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        project
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      resolved via fallback
    </td>
    
    <td>
      Constrained project env → explicit parameter → <code>
        default_project
      </code>
      
       config
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        workspace
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      —
    </td>
    
    <td>
      Cloud workspace name or tenant ID
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        output_format
      </code>
    </td>
    
    <td>
      <code>
        "text"
      </code>
      
       or <code>
        "json"
      </code>
    </td>
    
    <td>
      <code>
        "text"
      </code>
    </td>
    
    <td>
      Machine-readable JSON output. <code>
        build_context
      </code>
      
       defaults to <code>
        "json"
      </code>
      
      ; all other tools default to <code>
        "text"
      </code>
    </td>
  </tr>
</tbody>
</table>

---

## Knowledge tools

### `write_note`

Create or update a markdown note.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        title
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Note title
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        content
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Markdown body
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        directory
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Relative folder path
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        tags
      </code>
    </td>
    
    <td>
      list<span>
        string
      </span>
      
       or string
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Comma-separated string accepted
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        note_type
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Default <code>
        note
      </code>
      
      . Sets the <code>
        type
      </code>
      
       frontmatter field (e.g., <code>
        person
      </code>
      
      , <code>
        meeting
      </code>
      
      , <code>
        decision
      </code>
      
      )
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        metadata
      </code>
    </td>
    
    <td>
      object
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Extra frontmatter fields merged into the note's YAML header
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        overwrite
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Default <code>
        false
      </code>
      
      . Must be <code>
        true
      </code>
      
       to replace an existing note. Without this, writing to an existing path returns an error. Set <code>
        write_note_overwrite_default: true
      </code>
      
       in config to change the default
    </td>
  </tr>
</tbody>
</table>

The `note_type` parameter controls the `type` field in frontmatter, which is used for schema resolution and filtering. The `metadata` parameter accepts any key-value pairs that get written directly into the note's frontmatter — useful for custom fields like `status`, `priority`, or `due_date`.

### `read_note`

Read note content by title/permalink/memory URL.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        identifier
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Title, permalink, or <code>
        memory://...
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        page
      </code>
    </td>
    
    <td>
      integer
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Pagination page number
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        page_size
      </code>
    </td>
    
    <td>
      integer
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Results per page
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        include_frontmatter
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Default <code>
        false
      </code>
      
      . When <code>
        true
      </code>
      
      , includes YAML frontmatter in output
    </td>
  </tr>
</tbody>
</table>

### `edit_note`

Edit an existing note incrementally.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        identifier
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Exact note identifier
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        operation
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      <code>
        append
      </code>
      
      , <code>
        prepend
      </code>
      
      , <code>
        find_replace
      </code>
      
      , <code>
        replace_section
      </code>
      
      , <code>
        insert_before_section
      </code>
      
      , <code>
        insert_after_section
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        content
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      New content
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        section
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Conditional
    </td>
    
    <td>
      Required for <code>
        replace_section
      </code>
      
      , <code>
        insert_before_section
      </code>
      
      , <code>
        insert_after_section
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        find_text
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Conditional
    </td>
    
    <td>
      Required for <code>
        find_replace
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        expected_replacements
      </code>
    </td>
    
    <td>
      integer
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Default <code>
        1
      </code>
    </td>
  </tr>
</tbody>
</table>

### `move_note`

Move a note or directory.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        identifier
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Note or directory identifier
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        destination_path
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Conditional
    </td>
    
    <td>
      Target path. Mutually exclusive with <code>
        destination_folder
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        destination_folder
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Conditional
    </td>
    
    <td>
      Target folder — moves note into folder preserving filename. Mutually exclusive with <code>
        destination_path
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        is_directory
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Default <code>
        false
      </code>
      
      . Set to <code>
        true
      </code>
      
       to move an entire directory
    </td>
  </tr>
</tbody>
</table>

### `delete_note`

Delete a note or directory.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        identifier
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Note or directory
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        is_directory
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Set to <code>
        true
      </code>
      
       to delete an entire directory and its contents
    </td>
  </tr>
</tbody>
</table>

### `read_content`

Read raw file content by path or permalink. Returns the file's raw bytes — useful for non-markdown files like images, PDFs, or binary attachments.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        path
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      File path, permalink, or <code>
        memory://...
      </code>
      
       URL
    </td>
  </tr>
</tbody>
</table>

### `view_note`

Render a note as a formatted artifact for display in MCP clients. Returns the note content in a presentation-friendly format.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        identifier
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Note title, permalink, or <code>
        memory://...
      </code>
      
       URL
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        page
      </code>
    </td>
    
    <td>
      integer
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Pagination page number
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        page_size
      </code>
    </td>
    
    <td>
      integer
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Results per page
    </td>
  </tr>
</tbody>
</table>

---

## Search and context tools

### `search_notes`

Main search tool with text, vector, and hybrid modes plus structured filters.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        query
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Search query. Optional for metadata-only searches. Supports <code>
        tag:
      </code>
      
       shorthand (e.g., <code>
        "tag:security"
      </code>
      
      )
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        page
      </code>
    </td>
    
    <td>
      integer
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Default <code>
        1
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        page_size
      </code>
    </td>
    
    <td>
      integer
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Default <code>
        10
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        search_type
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Default <code>
        None
      </code>
      
       — resolves to <code>
        hybrid
      </code>
      
       when semantic search is enabled, <code>
        text
      </code>
      
       otherwise. Options: <code>
        text
      </code>
      
      , <code>
        title
      </code>
      
      , <code>
        permalink
      </code>
      
      , <code>
        vector
      </code>
      
      , <code>
        semantic
      </code>
      
      , <code>
        hybrid
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        note_types
      </code>
    </td>
    
    <td>
      list<span>
        string
      </span>
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Frontmatter type filter (e.g., <code>
        ["person", "meeting"]
      </code>
      
      )
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        entity_types
      </code>
    </td>
    
    <td>
      list<span>
        string
      </span>
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Result type filter: <code>
        entity
      </code>
      
      , <code>
        observation
      </code>
      
      , <code>
        relation
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        after_date
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Date/time filter (ISO format)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        metadata_filters
      </code>
    </td>
    
    <td>
      object
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Structured metadata filters
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        tags
      </code>
    </td>
    
    <td>
      list<span>
        string
      </span>
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Tag filter shorthand
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        status
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Status shorthand
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        min_similarity
      </code>
    </td>
    
    <td>
      float
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Overrides global <code>
        semantic_min_similarity
      </code>
      
       threshold per query
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        search_all_projects
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Default <code>
        false
      </code>
      
      . Search stays scoped to the resolved project; set <code>
        true
      </code>
      
       to search across every accessible project and workspace
    </td>
  </tr>
</tbody>
</table>

The `search_type` parameter controls the search strategy. `hybrid` is the default — it combines keyword and semantic search. `text` is keyword-only. `vector` and `semantic` are equivalent — pure meaning-based similarity. See [Semantic Search](/concepts/semantic-search) for details on each mode.

<note>

**Parameter aliases.** `search_notes` accepts `q`, `search`, or `text` as aliases for `query`, so assistants can use the parameter name they reach for naturally. Search responses also include a result total for pagination.

</note>

### `build_context`

Build context graph from a memory URL. Traverses the knowledge graph from a starting entity, following relations to a configurable depth.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        url
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      <code>
        memory://
      </code>
      
       URL or path
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        depth
      </code>
    </td>
    
    <td>
      string or integer
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Traversal depth (default <code>
        1
      </code>
      
      ). Use <code>
        2
      </code>
      
       or <code>
        3
      </code>
      
       for broader context
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        timeframe
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Time window filter (default <code>
        7d
      </code>
      
      ). Accepts formats like <code>
        7d
      </code>
      
      , <code>
        1 week
      </code>
      
      , <code>
        30d
      </code>
      
      , <code>
        3 months
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        page
      </code>
    </td>
    
    <td>
      integer
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Default <code>
        1
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        page_size
      </code>
    </td>
    
    <td>
      integer
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Default <code>
        10
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        max_related
      </code>
    </td>
    
    <td>
      integer
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Maximum related entities per level (default <code>
        10
      </code>
      
      )
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        output_format
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Default <code>
        "json"
      </code>
      
      . Also accepts <code>
        "text"
      </code>
      
       for human-readable output
    </td>
  </tr>
</tbody>
</table>

**TimeFrame examples:**

<table>
<thead>
  <tr>
    <th>
      Value
    </th>
    
    <th>
      Meaning
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        7d
      </code>
    </td>
    
    <td>
      Last 7 days
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        30d
      </code>
    </td>
    
    <td>
      Last 30 days
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        1 week
      </code>
    </td>
    
    <td>
      Last week
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        3 months
      </code>
    </td>
    
    <td>
      Last 3 months
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        1 year
      </code>
    </td>
    
    <td>
      Last year
    </td>
  </tr>
</tbody>
</table>

### `recent_activity`

Recent activity in one project or cross-project discovery mode. When called without a `project` parameter, returns activity across all projects.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        type
      </code>
    </td>
    
    <td>
      string or list<span>
        string
      </span>
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Filter by result type: <code>
        "entity"
      </code>
      
      , <code>
        "relation"
      </code>
      
      , <code>
        "observation"
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        depth
      </code>
    </td>
    
    <td>
      integer
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Relation traversal depth for context
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        timeframe
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Time window (e.g., <code>
        7d
      </code>
      
      , <code>
        30d
      </code>
      
      , <code>
        1 week
      </code>
      
      )
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        page
      </code>
    </td>
    
    <td>
      integer
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Default <code>
        1
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        page_size
      </code>
    </td>
    
    <td>
      integer
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Default <code>
        10
      </code>
    </td>
  </tr>
</tbody>
</table>

---

## Project and filesystem tools

### `list_memory_projects`

List projects and project stats. Returns name, path, default status, note count, and last sync time for each project. In cloud mode, this discovers projects across **every** accessible workspace, not just the current one — so a team's projects show up without switching workspaces first.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        workspace
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Limit results to a specific cloud workspace (name or tenant ID)
    </td>
  </tr>
</tbody>
</table>

### `create_memory_project`

Create a project.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        project_name
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Name for the new project
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        project_path
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Filesystem path for the project
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        set_default
      </code>
    </td>
    
    <td>
      boolean
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Default <code>
        false
      </code>
      
      . Set to <code>
        true
      </code>
      
       to make this the default project
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        workspace
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Cloud workspace name or slug to create the project in (cloud only)
    </td>
  </tr>
</tbody>
</table>

### `delete_project`

Remove a project from Basic Memory config.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        project_name
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Name of the project to remove
    </td>
  </tr>
</tbody>
</table>

### `list_directory`

List directory contents with optional depth and glob filter.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        dir_name
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Directory path to list (root if omitted)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        depth
      </code>
    </td>
    
    <td>
      integer
    </td>
    
    <td>
      No
    </td>
    
    <td>
      How many levels deep to list
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        file_name_glob
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Glob pattern to filter files (e.g., <code>
        *.md
      </code>
      
      , <code>
        schemas/*
      </code>
      
      )
    </td>
  </tr>
</tbody>
</table>

### `canvas`

Create Obsidian canvas files for visual knowledge graph exploration.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        nodes
      </code>
    </td>
    
    <td>
      list
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      List of node definitions for the canvas
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        edges
      </code>
    </td>
    
    <td>
      list
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      List of edge definitions connecting nodes
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        title
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Canvas file title
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        directory
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Relative folder path for the canvas file
    </td>
  </tr>
</tbody>
</table>

### `list_workspaces`

List available cloud workspaces. Returns workspace names and tenant IDs for the authenticated user.

---

## Schema tools

Tools for defining, validating, and evolving note structure. See [Schema System](/concepts/schema-system) for concepts and workflow.

### `schema_validate`

Validate notes against their schema. Pass `note_type` to validate all notes of a type, or `identifier` to validate a specific note.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        note_type
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Conditional
    </td>
    
    <td>
      Note type to validate (e.g., <code>
        person
      </code>
      
      ). One of <code>
        note_type
      </code>
      
       or <code>
        identifier
      </code>
      
       required
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        identifier
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Conditional
    </td>
    
    <td>
      Specific note path or permalink to validate
    </td>
  </tr>
</tbody>
</table>

### `schema_infer`

Analyze existing notes of a type and suggest a schema based on common patterns.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        note_type
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Note type to analyze (e.g., <code>
        person
      </code>
      
      )
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        threshold
      </code>
    </td>
    
    <td>
      float
    </td>
    
    <td>
      No
    </td>
    
    <td>
      Minimum field frequency for inclusion (default <code>
        0.25
      </code>
      
      )
    </td>
  </tr>
</tbody>
</table>

### `schema_diff`

Compare a schema definition against actual note usage to detect drift.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Required
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        note_type
      </code>
    </td>
    
    <td>
      string
    </td>
    
    <td>
      Yes
    </td>
    
    <td>
      Note type to compare (e.g., <code>
        person
      </code>
      
      )
    </td>
  </tr>
</tbody>
</table>

---

## Discovery tools

### Cloud discovery tools

- **cloud_info()** — Returns cloud connection information including authentication status, subscription details, and tenant info. No parameters.
- **release_notes()** — Returns the latest Basic Memory release notes and changelog. No parameters.

---

## ChatGPT compatibility tools

These are compatibility wrappers for ChatGPT's MCP implementation, which uses a simplified two-tool interface by default.

- **search(query)** — Search across the knowledge base. Equivalent to `search_notes` with default parameters.
- **fetch(id)** — Retrieve full document content by permalink. Equivalent to `read_note`.

See the [ChatGPT integration guide](/integrations/chatgpt) for usage details and limitations.

---

## Related pages

- [CLI Reference](/reference/cli-reference)
- [AI Assistant Guide](/reference/ai-assistant-guide)
- [Memory URLs](/concepts/memory-urls)
- [Schema System](/concepts/schema-system)
- [Semantic Search](/concepts/semantic-search)
