Skip to main content
Glama
Logseq MCP Tools

Logseq MCP Tools

logseq-mcp-main

Инструменты Logseq MCP

Этот проект предоставляет набор инструментов Model Context Protocol (MCP), которые позволяют агентам ИИ взаимодействовать с локальным экземпляром Logseq.

Установка

  1. Убедитесь, что у вас установлен Python 3.11+

  2. Клонировать этот репозиторий

  3. Установите зависимости:

    pip install -e .

Related MCP server: Logseq MCP Tools

Настраивать

  1. Убедитесь, что в вашем Logseq включен API.

    • В Logseq перейдите в Настройки > Дополнительно > Режим разработчика > Включить режим разработчика.

    • Затем перейдите в раздел «Плагины» > «Включить плагин разработчика Logseq».

    • Также установите API-токен в дополнительных настройках.

    • Перезапустить Logseq

  2. Настройте сервер MCP в файле конфигурации Cursor MCP (обычно в ~/.cursor/mcp.json ):

    {
      "mcpServers": {
        "logseq": {
          "command": "/opt/homebrew/bin/uvx",
          "args": ["logseq-mcp"],
          "env": {
            "LOGSEQ_API_URL": "http://localhost:12315",
            "LOGSEQ_TOKEN": "your-token-here"
          }
        }
      }
    }

ИЛИ

  1. Настройте Claude Code для использования сервера MCP с:

claude mcp add
  • Выберите область применения

  • Выбрать Stdio

  • LOGSEQ_API_URL=http://localhost:12315 LOGSEQ_TOKEN=your-token-here /opt/homebrew/bin/uvx logseq-mcp

Использование с Курсором и Клодом

Добавление в MCP Tools Курсора

  1. Настройте сервер MCP, как показано выше в разделе «Настройка».

  2. Откройте курсор и перейдите на панель MCP (боковая панель)

  3. Инструмент Logseq должен появиться в списке доступных инструментов.

Использование с Клодом

При использовании Claude в Cursor вам необходимо сообщить ему, что у вас доступны инструменты Logseq, с помощью примерно такого запроса:

«У вас есть доступ к инструментам Logseq, которые помогут вам взаимодействовать с моим графиком Logseq. Вы можете использовать такие функции, как logseq.get_all_pages(), logseq.get_page(name), logseq.create_page(name) и т. д.»

Доступные инструменты

Все инструменты доступны в пространстве имен logseq :

Страницы

  • logseq.get_all_pages : Получить список всех страниц в графике Logseq

  • logseq.get_page : Получить конкретную страницу по имени

  • logseq.create_page : Создать новую страницу

  • logseq.delete_page : Удалить страницу и все ее блоки

Блоки

  • logseq.get_page_blocks : Получить все блоки с определенной страницы

  • logseq.get_block : Получить определенный блок по идентификатору

  • logseq.create_block : Создать новый блок на странице

  • logseq.insert_block : Вставить блок как дочерний элемент другого блока

  • logseq.update_block : обновить существующий блок

  • logseq.move_block : Переместить блок в другое место

  • logseq.remove_block : Удалить блок и все его дочерние элементы

  • logseq.search_blocks : Поиск блоков, соответствующих запросу

Работа с Logseq

Страницы журнала

Страницы журнала в Logseq имеют определенный формат и атрибуты:

  1. Используйте формат «ммм дт, гггг» (например, «4 апр. 2025 г.») при создании или доступе к страницам журнала.

  2. Страницы журнала автоматически форматируются Logseq с правильной датировкой

  3. Страницы журнала имеют специальные атрибуты, которые автоматически устанавливаются Logseq:

    • journal? : true - Указывает, что это страница журнала

    • journalDay : YYYYMMDD - дата в числовом формате (например, 20250404 для 4 апреля 2025 г.)

  4. Пример: await logseq.create_page("Apr 4th, 2025")

Важно: Вам не нужно вручную устанавливать атрибуты journal? или journalDay . Простое создание страницы с правильным форматом даты (например, "4 апреля 2025 г.") автоматически настроит ее как страницу журнала с соответствующими атрибутами.

Структура блока и форматирование

Блоки в Logseq имеют некоторые важные характеристики, которые следует понимать:

  1. Автоматические маркеры : все блоки автоматически отображаются в виде маркеров в пользовательском интерфейсе Logseq.

  2. Ссылки на страницы : создайте ссылки, используя двойные скобки: [[Page Name]]

  3. Иерархические блоки :

    • Данные о структуре блока содержат иерархическую информацию:

      • parent : идентификатор родительского блока

      • level : уровень отступа (1 для верхнего уровня, 2+ для блоков с отступом)

      • left : Блок слева (обычно родительский для блоков с отступом)

  4. Содержимое блока : при создании блоков вы можете включить форматирование текста:

    • Поддерживается базовый Markdown (жирный, курсив и т. д.)

    • Маркированные списки внутри блока могут иметь ограниченную поддержку

    • Многострочный контент поддерживается, но может подчиняться правилам синтаксического анализа Logseq.

  5. Блоки журнала : Блоки, созданные на страницах журнала, наследуют специальные атрибуты:

    • journal? : правда

    • journalDay : YYYYMMDD - То же, что и на странице журнала

Примечание: Как и страницы журнала, эти атрибуты блока автоматически обрабатываются Logseq. Вам не нужно вручную устанавливать атрибуты journal? или journalDay при создании блоков на страницах журнала.

Пример использования для общих задач

Работа с агентом Cursor: если в Cursor настроены инструменты Logseq MCP, вы можете давать агенту такие запросы:

  • «Создайте новую страницу под названием «Заметки о встрече» с тезисами повестки дня на сегодня»

  • «Добавить сегодняшние задачи на страницу моего журнала с разделом «Задачи»»

  • «Обновить сегодняшнюю запись в журнале с помощью [[План проекта]], установить его дочерний элемент на «Завершенная веха 1»»

  • «Найдите в моем графике блоки о «проектах Python» и организуйте их на новой странице»

Агент будет использовать соответствующие инструменты Logseq для выполнения этих операций на вашем графике.

Available Tools

13 tools
create_blockA
Creates a new block on a page in the Logseq graph.

IMPORTANT NOTES:
1. All blocks are automatically formatted as bullet points in Logseq UI
2. To create links to other pages, use double brackets: [[Page Name]]

When creating blocks on journal pages:
  - The block will inherit the "journal?" and "journalDay" attributes from the page
  - "journalDay" will be in YYYYMMDD format (e.g., 20250404 for April 4, 2025)

Args:
    page_name (str): The name of the page to create the block on.
    content (str): The content of the new block.
    properties (dict, optional): Properties to set on the new block.
    
Returns:
    dict: Information about the created block.

Inputs: page_name (required), content (required), properties.

create_pageA
Creates a new page in the Logseq graph.

For journal pages, use the format "mmm dth, yyyy" (e.g., "Apr 4th, 2025").
Journal pages are specially formatted in Logseq with automatic dating.

When you create a journal page, Logseq automatically:
- Sets "journal?": true
- Sets "journalDay": YYYYMMDD (e.g., 20250404 for April 4, 2025)
- Formats the page as a journal entry

Args:
    name (str): The name of the new page.
    properties (dict, optional): Properties to set on the new page.
    
Returns:
    dict: Information about the created page.

Inputs: name (required), properties.

delete_pageA
Deletes a page from the Logseq graph.

This operation removes the specified page and all its blocks. This action cannot be undone.

For journal pages, use the format "mmm dth, yyyy" (e.g., "Apr 4th, 2025").

Args:
    name (str): The name of the page to delete.
    
Returns:
    dict: Result of the deletion operation.

Inputs: name (required).

get_all_pagesA
Gets all pages from the Logseq graph.

Journal pages can be identified by the "journal?" attribute set to true and 
will include a "journalDay" attribute in the format YYYYMMDD.

Returns:
    list: A list of all pages in the Logseq graph.

Inputs: no named parameters.

get_blockA
Gets a specific block from the Logseq graph by its ID.

The returned block contains information about its hierarchical structure:
  - parent: The parent block's ID
  - level: The indentation level (1 for top-level, 2+ for indented blocks)
  - left: The block to the left (typically the parent for indented blocks)

If the block is from a journal page, it will include:
  - "journal?": true
  - "journalDay": YYYYMMDD - Date in numeric format

Args:
    block_id (str): The ID of the block to retrieve.
    
Returns:
    dict: Information about the requested block.

Inputs: block_id (required).

get_pageA
Gets a specific page from the Logseq graph by name.

For journal pages, use the format "mmm dth, yyyy" (e.g., "Apr 4th, 2025").
Note that journal pages are automatically created in Logseq with this date format.

Journal pages have specific attributes:
- "journal?": true - Indicates this is a journal page
- "journalDay": YYYYMMDD - The date in numeric format (e.g., 20250404 for April 4, 2025)

Args:
    name (str): The name of the page to retrieve.
    
Returns:
    dict: Information about the requested page.

Inputs: name (required).

get_page_blocksA
Gets all blocks from a specific page in the Logseq graph.

For journal pages, use the format "mmm dth, yyyy" (e.g., "Apr 4th, 2025").
Returned blocks contain information about their hierarchical structure:
  - parent: The parent block's ID
  - level: The indentation level (1 for top-level, 2+ for indented blocks)
  - left: The block to the left (typically the parent for indented blocks)

Blocks from journal pages will have:
  - "journal?": true
  - "journalDay": YYYYMMDD - The date in numeric format (e.g., 20250404)

Args:
    page_name (str): The name of the page to retrieve blocks from.
    
Returns:
    list: A list of blocks from the specified page.

Inputs: page_name (required).

get_page_linked_referencesA
Gets all linked references to a specific page in the Logseq graph.

This returns blocks that contain links to the specified page using
the Logseq double bracket notation: [[Page Name]].

For journal pages, use the format "mmm dth, yyyy" (e.g., "Apr 4th, 2025").

Args:
    page_name (str): The name of the page to find references to.
    
Returns:
    list: A list of blocks that reference the specified page.

Inputs: page_name (required).

insert_blockA
Inserts a new block as a child of the specified parent block.

This allows for creating hierarchical content by adding children to existing blocks.

IMPORTANT NOTES:
1. All blocks are automatically formatted as bullet points in Logseq UI
2. To create links to other pages, use double brackets: [[Page Name]]
3. The new block will be inserted at the beginning or end of the parent's children
   depending on the 'before' parameter

When inserting blocks into journal pages:
  - The block will inherit the "journal?" and "journalDay" attributes
  - "journalDay" will be in YYYYMMDD format (e.g., 20250404 for April 4, 2025)

Args:
    parent_block_id (str): The ID of the parent block to insert under.
    content (str): The content of the new block.
    properties (dict, optional): Properties to set on the new block.
    before (bool, optional): Whether to insert at the beginning of children. 
                            Default is False (append at the end).
    
Returns:
    dict: Information about the created block.

Inputs: parent_block_id (required), content (required), properties, before.

move_blockA
Moves a block to a new location in the graph.

This allows for reorganizing the structure of blocks in the graph by moving
a block (and all its children) to a different location.

IMPORTANT NOTES:
1. The block will maintain its children when moved
2. The hierarchical position depends on the 'as_child' parameter:
   - If as_child=True: The block becomes a child of the target block
   - If as_child=False: The block becomes a sibling after the target block

Args:
    block_id (str): The ID of the block to move.
    target_block_id (str): The ID of the target block to move to.
    as_child (bool, optional): Whether to make the block a child of the target.
                              Default is False (insert as sibling).
    
Returns:
    dict: Result of the move operation.

Inputs: block_id (required), target_block_id (required), as_child.

remove_blockA
Removes a block from the Logseq graph.

This operation permanently removes the specified block and all its children.
This action cannot be undone.

To remove a block, you need its block ID, which can be obtained from:
- get_page_blocks() function
- get_block() function
- search_blocks() function

Args:
    block_id (str): The ID of the block to remove.
    
Returns:
    dict: Result of the removal operation.

Inputs: block_id (required).

search_blocksA
Searches for blocks matching a query in the Logseq graph.

Examples of useful queries:
- page:"Page Name" - find all blocks on a specific page
- "search term" - find blocks containing the term
- page:"Apr 4th, 2025" - find all blocks in a journal
- [[Page Name]] - find references to a specific page

Returned blocks from journal pages will include:
- "journal?": true
- "journalDay": YYYYMMDD - The date in numeric format

Args:
    query (str): The search query.
    
Returns:
    list: A list of blocks matching the search query.

Inputs: query (required).

update_blockA
Updates an existing block in the Logseq graph.

IMPORTANT NOTES:
1. All blocks are automatically formatted as bullet points in Logseq UI
2. To create links to other pages, use double brackets: [[Page Name]]

When updating blocks on journal pages:
  - The "journal?" and "journalDay" attributes will be preserved
  - "journalDay" will remain in YYYYMMDD format (e.g., 20250404)

Args:
    block_id (str): The ID of the block to update.
    content (str): The new content for the block.
    properties (dict, optional): Properties to update on the block.
    
Returns:
    dict: Information about the updated block.

Inputs: block_id (required), content (required), properties.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.3/5.0

    Scored across 13 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose with no overlap. For example, create_block and insert_block serve different functions (creating a block on a page vs. inserting a block as a child), and get_page_blocks and search_blocks target different retrieval methods. The descriptions reinforce these distinctions, making misselection unlikely.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern with snake_case, such as create_block, get_page, and update_block. This uniformity makes the tool set predictable and easy to navigate, with no deviations in naming conventions.

    Tool Count5/5

    With 13 tools, the set is well-scoped for managing a Logseq graph, covering essential operations like CRUD for pages and blocks, hierarchical manipulation, and search. Each tool serves a clear purpose without redundancy, making the count appropriate for the domain.

    Completeness5/5

    The tool set provides comprehensive coverage for Logseq graph management, including full CRUD for pages and blocks, hierarchical operations (move_block, insert_block), retrieval methods (get_all_pages, search_blocks), and advanced features like linked references. There are no obvious gaps that would hinder agent workflows.

    Related MCP Connectors

    Related MCP Servers