MCP server for LogSeq
The MCP server for LogSeq enables Claude to programmatically interact with LogSeq graphs via its API, providing comprehensive knowledge management and automation capabilities.
Core Functions:
Create Pages: Generate new pages by specifying title and content
List Pages: Retrieve all pages in your graph, with optional inclusion of journal/daily notes
Read Page Content: Access and read content from specific pages
Update Pages: Modify existing page content
Delete Pages: Remove unwanted pages from your graph
Search Content: Find specific content across your entire LogSeq graph
AI-Powered Workflows: Automate tasks like summarizing notes, organizing content, and generating new pages based on existing data for enhanced knowledge management.
Allows interaction with LogSeq via its API, including listing graphs and pages, getting, creating, updating, and deleting pages, and searching content across all pages
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP server for LogSeqcreate a new page for today's meeting notes and link it to the project overview"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
✨ What You Can Do
Transform your LogSeq knowledge base into an AI-powered workspace! This MCP server enables Claude to seamlessly interact with your LogSeq graphs.
🎯 Real-World Examples
📊 Intelligent Knowledge Management
"Analyze all my project notes from the past month and create a status summary"
"Find pages mentioning 'machine learning' and create a study roadmap"
"Search for incomplete tasks across all my pages"📝 Automated Content Creation
"Create a new page called 'Today's Standup' with my meeting notes"
"Add today's progress update to my existing project timeline page"
"Create a weekly review page from my recent notes"🔍 Smart Research & Analysis
"Compare my notes on React vs Vue and highlight key differences"
"Find all references to 'customer feedback' and summarize themes"
"Create a knowledge map connecting related topics across pages"🧠 Semantic Search (optional, requires vector setup)
"Find everything I wrote about burnout, even if I didn't use that word"
"What notes relate to my thoughts on deep work?"
"Search across my Dutch and English notes for ideas about productivity"🤝 Meeting & Documentation Workflow
"Read my meeting notes and create individual task pages for each action item"
"Get my journal entries from this week and create a summary page"
"Search for 'Q4 planning' and organize all related content into a new overview page"💡 Key Benefits
Zero Context Switching: Claude works directly with your LogSeq data
Preserve Your Workflow: No need to export or copy content manually
Intelligent Organization: AI-powered page creation, linking, and search
Enhanced Productivity: Automate repetitive knowledge work
Semantic Vector Search (optional): Find notes by meaning using local Ollama or hosted OpenAI-compatible embeddings
DB-mode Support (opt-in): Read and write class properties on Logseq DB-mode graphs
Related MCP server: Logseq MCP Server
🚀 Quick Start
Step 1: Enable LogSeq API
Settings → Features → Check "Enable HTTP APIs server"
Click the API button (🔌) in LogSeq → "Start server"
Generate API token: API panel → "Authorization tokens" → Create new
Step 2: Add to Claude (No Installation Required!)
Claude Code
claude mcp add mcp-logseq \
--env LOGSEQ_API_TOKEN=your_token_here \
--env LOGSEQ_API_URL=http://localhost:12315 \
-- uv run --with mcp-logseq mcp-logseqClaude Desktop
Add to your config file (Settings → Developer → Edit Config):
{
"mcpServers": {
"mcp-logseq": {
"command": "uv",
"args": ["run", "--with", "mcp-logseq", "mcp-logseq"],
"env": {
"LOGSEQ_API_TOKEN": "your_token_here",
"LOGSEQ_API_URL": "http://localhost:12315"
}
}
}
}Step 3: Start Using!
"Please help me organize my LogSeq notes. Show me what pages I have."🔬 Vector Search (Optional)
Semantic search over your Logseq graph using configurable embeddings — find notes by meaning, not just keywords. Searches across all your pages using vector similarity and full-text search combined, with cross-language support.
Use Ollama for fully local embeddings, OpenAI, or another OpenAI-compatible embeddings endpoint. LanceDB remains local in every configuration. Hosted providers receive the note text being embedded.
→ Full setup guide: VECTOR_SEARCH.md
🛠️ Available Tools
The server provides 16 tools with intelligent markdown parsing, plus 3 optional vector search tools:
Tool | Purpose | Example Use |
| Browse your graph | "Show me all my pages" |
| Read page content | "Get my project notes" |
| Add new pages with structured blocks | "Create a meeting notes page with agenda items" |
| Modify pages (append/replace modes) | "Update my task list" |
| Remove pages | "Delete the old draft page" |
| Remove a block by UUID | "Delete this specific block" |
| Edit block content by UUID | "Update this specific block text" |
| Find content across graph | "Search for 'productivity tips'" |
| Execute Logseq DSL queries | "Find all TODO tasks tagged #project" |
| Search pages by property | "Find all pages with status = active" |
| List pages in a namespace | "Show all pages under Customer/" |
| Hierarchical namespace view | "Show Projects/ as a tree" |
| Rename with reference updates | "Rename 'Old Name' to 'New Name'" |
| Find pages linking to a page | "What links to this page?" |
| Insert child/sibling blocks | "Add a child block under this task" |
| Set DB-mode class properties on a block | "Set the status of this block to active" (DB-mode only) |
| Semantic search by meaning | "Find notes about shadow work or Jung" |
| Sync vector DB with graph files | "Update the search index" |
| Show vector DB health and staleness | "Is my search index up to date?" |
⚗️ Requires vector search setup — see VECTOR_SEARCH.md
🎨 Smart Markdown Parsing (v1.1.0+)
The create_page and update_page tools now automatically convert markdown into Logseq's native block structure:
Markdown Input:
---
tags: [project, active]
priority: high
---
# Project Overview
Introduction paragraph here.
## Tasks
- Task 1
- Subtask A
- Subtask B
- Task 2
## Code Example
```python
def hello():
print("Hello Logseq!")
```Result: Creates properly nested blocks with:
✅ Page properties from YAML frontmatter (
tags,priority)✅ Hierarchical sections from headings (
#,##,###)✅ Nested bullet lists with proper indentation
✅ Code blocks preserved as single blocks
✅ Checkbox support (
- [ ]→ TODO,- [x]→ DONE)
Update Modes:
append(default): Add new content after existing blocksreplace: Clear page and replace with new content
🔁 Safe Retries & Large Writes
create_page fails with a clear error if a page with the same title already exists, instead of letting Logseq silently create numbered duplicates (Page(1), Page 2, ...). This makes retries after a timeout safe: if a previous create_page call timed out but actually committed, the retry tells you the page exists rather than fragmenting your content across ghost pages.
For large writes, prefer this pattern over one giant create_page call:
Create the page with little or no content (
create_pagewith just the title and properties)Append content in smaller chunks with
update_page(mode: append)Read back with
get_page_contentto verify the result
If you hit the "already exists" error mid-ingest, use get_page_content to see what landed, then continue with update_page instead of re-creating.
⚙️ Prerequisites
LogSeq Setup
LogSeq installed and running
HTTP APIs server enabled (Settings → Features)
API server started (🔌 button → "Start server")
API token generated (API panel → Authorization tokens)
System Requirements
uv Python package manager
MCP-compatible client (Claude Code, Claude Desktop, etc.)
🔧 Configuration
Environment Variables
LOGSEQ_API_TOKEN(required): Your LogSeq API tokenLOGSEQ_API_URL(optional): Server URL (default:http://localhost:12315)LOGSEQ_API_CONNECT_TIMEOUT(optional): HTTP connect timeout in seconds (default:3)LOGSEQ_API_READ_TIMEOUT(optional): HTTP read timeout in seconds (default:6)LOGSEQ_DB_MODE(optional): Set totrueto enable DB-mode property support. Only for Logseq DB-mode graphs (beta). Markdown/file-based graph users should leave this unset.LOGSEQ_EXCLUDE_TAGS(optional): Comma-separated tags — pages with these tags are hidden from all tools. See Privacy & Access Control below.LOGSEQ_INCLUDE_NAMESPACES(optional): Comma-separated namespace allow-list (e.g.work,projects). When set, only pages in these namespaces and their sub-pages are accessible — everything else, including top-level pages without a namespace, is hidden from listings/search and denied on direct access. See Privacy & Access Control below.LOGSEQ_EXCLUDE_NAMESPACES(optional): Comma-separated namespace deny-list (e.g.finance,work/secret). These namespaces are always blocked, taking priority over the include list. See Privacy & Access Control below.LOGSEQ_CONFIG_FILE(optional): Path to a shared JSON config file holding the graph path, ACL defaults, and thevectorblock. Env vars (LOGSEQ_EXCLUDE_TAGS,LOGSEQ_INCLUDE_NAMESPACES,LOGSEQ_EXCLUDE_NAMESPACES) override the matching keys in this file.MCP_HTTP_AUTH_TOKEN(required for--transport http): Bearer token clients must send asAuthorization: Bearer <token>. The server refuses to start in HTTP mode without it. See Serving over HTTP.
Privacy & Access Control
Pages tagged with excluded tags are completely hidden from AI — they won't appear in listings, searches, or queries, and attempting to read them directly returns an access-denied error.
Quick setup via env var:
LOGSEQ_EXCLUDE_TAGS=private,secretVia config file (also used for vector search):
{
"logseq_graph_path": "/path/to/your/logseq/pages",
"exclude_tags": ["private", "secret"]
}Point to it with LOGSEQ_CONFIG_FILE=/path/to/config.json.
In your Logseq pages, tag any page you want to protect:
tags:: privateThe exclusion applies to all tools: list_pages, get_page_content, search, query, and the optional vector search. If you also use vector search, exclude_tags at the root is automatically merged into the vector index exclusion list — private pages are never embedded.
Namespace access control
You can restrict access to specific namespaces using LOGSEQ_INCLUDE_NAMESPACES and LOGSEQ_EXCLUDE_NAMESPACES.
Include list (strict allow-list): Only the listed namespaces and their sub-pages are visible; everything else is hidden.
LOGSEQ_INCLUDE_NAMESPACES=work,projectsExclude list (deny-list): The listed namespaces are always blocked, even if they appear in the include list.
LOGSEQ_EXCLUDE_NAMESPACES=work/secret,financeVia config file:
{
"include_namespaces": ["work", "projects"],
"exclude_namespaces": ["work/secret", "finance"]
}Matching is segment-based and case-insensitive: work matches work and work/projects but not workshop. The behavior mirrors LOGSEQ_EXCLUDE_TAGS: list/search results silently omit blocked pages; direct read, write, delete, and block operations return an access-denied error.
Access control is enforced at the page level and applied across every tool: list/search/query results omit blocked pages, direct page/block access and backlinks are denied, and vector search is filtered. Block-level results from search and query are resolved back to their owning page, so a block belonging to a restricted page is filtered out of those results too.
Index-time namespace scoping (vector DB only). The keys above are query-time: every page is embedded, and blocked ones are filtered out of each response. For the vector DB you can also scope at index time — decide which namespaces are embedded into the DB at all — with include_namespaces / exclude_namespaces inside the vector block of the config file:
{
"vector": {
"enabled": true,
"include_namespaces": ["work"],
"exclude_namespaces": ["work/secret"]
}
}This is global (it shapes the shared DB for every consumer), and it keeps unwanted content off disk entirely rather than filtering it on read — useful for secrets you never want embedded, or to keep the index small when everyone only cares about a subset. Matching is the same segment-based, case-insensitive rule. Because it changes what the index contains, it only takes effect after a full re-index: logseq-sync --rebuild.
🌐 Serving over HTTP, multi-profile & TLS
By default the server speaks stdio — your client spawns it as a subprocess, and most users need nothing more. To serve sandboxed or remote clients over the network, mcp-logseq can run as a long-lived HTTP service with bearer auth, per-profile isolation, and TLS:
mcp-logseq --transport http --host 127.0.0.1 --port 12320 # requires MCP_HTTP_AUTH_TOKENThe full deployment guide — the server-side security model, the per-profile multi-instance pattern, the separate logseq-sync writer, and native TLS / reverse-proxy setup — lives in docs/SERVING.md. Non-loopback binds over plain HTTP are refused unless you supply TLS or pass --insecure.
Alternative Setup Methods
Using .env file
# .env
LOGSEQ_API_TOKEN=your_token_here
LOGSEQ_API_URL=http://localhost:12315System environment variables
export LOGSEQ_API_TOKEN=your_token_here
export LOGSEQ_API_URL=http://localhost:12315🔍 Verification & Testing
Test LogSeq Connection
uv run --with mcp-logseq python -c "
from mcp_logseq.logseq import LogSeq
api = LogSeq(api_key='your_token')
print(f'Connected! Found {len(api.list_pages())} pages')
"Verify MCP Registration
claude mcp list # Should show mcp-logseqDebug with MCP Inspector
npx @modelcontextprotocol/inspector uv run --with mcp-logseq mcp-logseq🐛 Troubleshooting
Common Issues
"LOGSEQ_API_TOKEN environment variable required"
✅ Enable HTTP APIs in Settings → Features
✅ Click 🔌 button → "Start server" in LogSeq
✅ Generate token in API panel → Authorization tokens
✅ Verify token in your configuration
"spawn uv ENOENT" (Claude Desktop)
Claude Desktop can't find uv. Use the full path:
which uv # Find your uv locationUpdate config with full path:
{
"mcpServers": {
"mcp-logseq": {
"command": "/Users/username/.local/bin/uv",
"args": ["run", "--with", "mcp-logseq", "mcp-logseq"],
"env": { "LOGSEQ_API_TOKEN": "your_token_here" }
}
}
}Common uv locations:
Curl install:
~/.local/bin/uvHomebrew:
/opt/homebrew/bin/uvPip install: Check with
which uv
Connection Issues
✅ Confirm LogSeq is running
✅ Verify API server is started (not just enabled)
✅ Check port 12315 is accessible
✅ Test with verification command above
👩💻 Development
For local development, testing, and contributing, see DEVELOPMENT.md.
Available Tools
17 toolscreate_pageA
Create a new page in Logseq with properly structured blocks.
Fails if a page with the same title already exists (use update_page to modify existing pages). This makes retries safe: re-sending a create_page that timed out will not create numbered duplicates like "Page(1)".
Markdown content is automatically parsed into Logseq's block hierarchy:
Headings (# ## ###) create nested sections
Lists (- or 1.) become proper block trees
Code blocks are preserved as single blocks
YAML frontmatter (---) becomes page properties
Example content:
---
tags: [project, active]
priority: high
---
# Project Title
Introduction paragraph.
## Tasks
- Task 1
- Subtask A
- Task 2| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Title of the new page | |
| content | No | Markdown content to parse into blocks (optional) | |
| properties | No | Page properties (merged with frontmatter if both provided) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses failure on duplicate titles, retry safety, markdown parsing into block hierarchy, and property merging. Could mention return value or side effects, but covers key behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections, example, and clear explanations. Slightly long but each part serves a purpose. No wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers input semantics, behavior, and constraints. Missing return value description, but given the tool's simplicity and no output schema, it is sufficiently complete for page creation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3). Description adds meaning by explaining how 'content' is parsed (markdown into blocks) and that 'properties' merge with frontmatter. Adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new page') and the resource ('in Logseq with properly structured blocks'). It distinguishes from sibling tools like update_page by noting the fail condition for duplicate titles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (creating new pages) and when not to (if page exists, use update_page). Also explains retry safety, providing clear guidance for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_blockB
Delete a block from LogSeq by its UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| block_uuid | Yes | UUID of the block to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description does not disclose behavioral traits such as irreversibility, cascading effects, permissions needed, or return value. For a destructive operation, this lack of detail is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (one sentence), which is efficient. However, it could be front-loaded with additional critical info, but the brevity does not detract from clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (delete operation, single parameter, no output schema), the description lacks essential context about return values, error handling, and side effects, making it incomplete for safe agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema coverage is 100% with the parameter 'block_uuid' described. The description adds no further semantic meaning beyond 'by its UUID,' so it meets the baseline for adequate schema handling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Delete'), resource ('block'), and method ('by its UUID'), making it unambiguous. It distinguishes from sibling tools like 'delete_page' by specifying the object type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool over alternatives (e.g., why not delete the parent page?), nor any prerequisites or context. The description simply states the action without usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_pageB
Delete a page from LogSeq.
| Name | Required | Description | Default |
|---|---|---|---|
| page_name | Yes | Name of the page to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states 'Delete a page' but does not disclose whether the operation is irreversible, what happens to associated content, or if any authorization is needed. For a destructive action, more behavioral context is essential.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, highly concise and front-loaded. However, it may be too terse for a destructive operation; a slightly longer description with more detail would not harm conciseness. Still, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description is minimally adequate. It does not explain return behavior or confirmation, but given the low complexity, it covers the basic purpose. Missing details about side effects hold it back from a higher score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with the parameter description 'Name of the page to delete', so the description adds no extra semantic value. Baseline 3 is appropriate as the schema handles the parameter documentation adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Delete' and resource 'page' from 'LogSeq', clearly distinguishing it from siblings like 'delete_block' or 'rename_page'. It immediately communicates the core action and scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, prerequisites (e.g., page existence), or consequences. The description lacks explicit 'when to use' or 'when not to use' context, leaving the agent to infer from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_pages_by_propertyA
Find all pages that have a specific property, optionally filtered by value. Simpler alternative to the full query DSL.
| Name | Required | Description | Default |
|---|---|---|---|
| property_name | Yes | Name of the property to search for (e.g., 'status', 'type', 'service') | |
| property_value | No | Optional: specific value to match. If omitted, returns all pages that have this property. | |
| limit | No | Maximum number of results to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It describes the core filtering behavior adequately but does not mention potential side effects, permissions, or return format. For a read-only search tool, this is acceptable but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise, front-loaded sentences. The first sentence states the core purpose, the second provides context on alternatives. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 params, 1 required, no output schema), the description covers the key functionality and use case. It could mention pagination or ordering, but for a basic search tool it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described in the schema. The description adds overall context but no additional detail beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it finds all pages with a specific property, optionally filtered by value. Distinguishes itself by calling out it's a simpler alternative to the full query DSL.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says it's a simpler alternative to the query DSL, implying when to use this tool. However, it does not mention exclusions or contrast with other sibling search tools like 'search' or 'query'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_blockA
Get a single block by its UUID. Returns the block content, properties, and child blocks (recursively). Useful for inspecting a specific block after finding its UUID via search or query.
| Name | Required | Description | Default |
|---|---|---|---|
| block_uuid | Yes | UUID of the block to retrieve | |
| include_children | No | Whether to include child blocks recursively (default: true) | |
| format | No | Output format (text or json) | text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It accurately states that it returns block content, properties, and recursive child blocks, implying a read-only operation. However, it does not mention error conditions or recursion depth limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundant information. The first sentence states the primary action; the second provides a usage hint. Efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward get tool with 3 parameters and no output schema, the description adequately covers purpose and return content. It could mention that the output format is selectable, but that is in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds no additional meaning to the parameters (block_uuid, include_children, format) beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves a block by UUID and returns content, properties, and child blocks. It distinguishes itself from sibling tools like search or get_page_content by focusing on a single block identified by UUID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a use case: 'inspecting a specific block after finding its UUID via search or query.' This gives context but does not explicitly exclude scenarios or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_page_backlinksB
Get all pages and blocks that link to a specific page (backlinks/linked references).
| Name | Required | Description | Default |
|---|---|---|---|
| page_name | Yes | Name of the page to find backlinks for | |
| include_content | No | Whether to include the content of referencing blocks |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavioral traits. It only states what the tool returns, not that it is a safe read operation, potential performance implications, or any side effects. This is insufficient for a tool that queries links.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with clear verb and object, front-loaded with key information. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description could clarify the return format (e.g., 'returns a list of block references'). It is adequate for a simple list operation but lacks completeness for an agent to fully understand the output structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both parameters described in schema). Description adds no extra meaning beyond the schema, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Get' and resource 'all pages and blocks that link to a specific page' with explicit mention of 'backlinks/linked references', distinguishing it from sibling tools that retrieve single blocks or page content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool over alternatives (e.g., search for linking references), nor any mention of when not to use it. The description lacks context about prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_page_contentB
Get the content of a specific page from LogSeq.
| Name | Required | Description | Default |
|---|---|---|---|
| page_name | Yes | Name of the page to retrieve | |
| format | No | Output format (text or json) | text |
| max_depth | No | Maximum nesting depth to display (default: -1 for unlimited) | |
| resolve_refs | No | Resolve [[uuid]] page references to [[Page Name]] in DB mode (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must convey behavioral traits. While 'Get' implies a read-only operation, it does not disclose potential side effects, authorization needs, rate limits, or error scenarios. The description is insufficient for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that conveys the core purpose without unnecessary words. It is highly efficient and front-loaded, meeting the standard for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks details about return values, output format, or how the content is structured. Given that no output schema exists and there are 4 parameters, the description should explain that the content is returned in the specified format (e.g., text or JSON) and potentially mention nesting or reference resolution behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all parameters with descriptions (100% coverage), so the baseline is 3. The description adds no additional parameter-level information, but the schema already adequately explains each parameter’s purpose and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves page content from LogSeq, using a specific verb ('Get') and resource ('content of a specific page'). This differentiates it from sibling tools like list_pages (which lists pages) or delete_page (destructive operation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, limitations, or contrast with sibling tools like search or query. The agent is left to infer usage without explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pages_from_namespaceA
Get all pages within a namespace hierarchy (flat list). Use this to discover subpages of a parent page.
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | Yes | The namespace to query (e.g., 'Customer', 'Projects/2024') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden of behavioral disclosure. It correctly states it returns a flat list of pages, but omits details on output structure (e.g., page properties), pagination, or ordering. For a read operation, this is acceptable but lacking completeness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states the core function, second provides usage context. No unnecessary words, and information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 1-parameter tool with no output schema, the description covers the basic intent but lacks details on return format or limits. An agent may need to know the structure of returned pages to chain calls, but the description is not severely deficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter, and the description adds no new meaning beyond the schema's own description (e.g., 'The namespace to query (e.g., 'Customer', 'Projects/2024')'). Baseline of 3 is appropriate since the schema already documents the parameter adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves all pages within a namespace hierarchy as a flat list. It uses a specific verb 'Get' and resource 'pages within a namespace hierarchy', and implicitly differentiates from sibling 'get_pages_tree_from_namespace' by contrasting flat vs. tree structure.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this to discover subpages of a parent page', providing a clear use case. However, it does not explicitly mention when not to use it or list alternatives like 'get_pages_tree_from_namespace' for tree views.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pages_tree_from_namespaceA
Get pages within a namespace as a hierarchical tree structure. Useful for understanding the full page hierarchy.
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | Yes | The root namespace to build tree from (e.g., 'Projects') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It lacks disclosure of behavioral traits like error handling, permissions, or limits beyond the basic purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff. Efficiently conveys purpose and context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and a single parameter, the description explains the use case but omits details about the tree structure or limitations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with the 'namespace' parameter described. The tool description adds minimal context beyond the schema, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get'), resource ('pages within a namespace'), and output format ('hierarchical tree structure'). It differentiates from sibling tool 'get_pages_from_namespace' by emphasizing hierarchy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context ('Useful for understanding the full page hierarchy') but does not explicitly mention when not to use or provide alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_nested_blockA
Insert a new block as a child or sibling of an existing block, enabling nested hierarchical structures
| Name | Required | Description | Default |
|---|---|---|---|
| parent_block_uuid | Yes | UUID of the reference block. If sibling=false, new block becomes a CHILD of this UUID. If sibling=true, new block becomes a SIBLING of this UUID (at the same level). | |
| content | Yes | Content text for the new block | |
| properties | No | Optional block properties (e.g., {'marker': 'TODO', 'priority': 'A'}) | |
| sibling | No | false (default) = insert as CHILD under parent_block_uuid. true = insert as SIBLING after parent_block_uuid at the same level. For multiple children under same parent, ALWAYS use false with the parent's UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries burden. It discloses child/sibling behavior and provides a hint for multiple children. However, it omits details on ordering, error handling, or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence captures core functionality without redundancy. Front-loaded with verb and resource, efficiently conveying purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity tool with no output schema and no annotations, the description is adequate but not thorough. It lacks details on return values, error cases, and ordering of nested blocks.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all parameters (100% coverage). Description rephrases the parent_block_uuid and sibling roles but adds no new semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool inserts a block as child or sibling, with specific verb 'Insert' and resource 'block'. It distinguishes from sibling tools (e.g., update_block, delete_block) as the only insertion tool for nested hierarchies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like update_block or set_block_properties. The sibling parameter description offers some context but no global usage criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesB
Lists all pages in a LogSeq graph.
| Name | Required | Description | Default |
|---|---|---|---|
| include_journals | No | Whether to include journal/daily notes in the list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, and the description does not disclose any behavioral traits such as performance implications, default behavior (journals excluded by default), or limitations. The minimal description leaves agents uninformed about side effects or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no wasted words. It could be slightly longer to include more detail but remains focused.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description omits what the returned list contains (e.g., page IDs, titles). It also fails to mention whether the list is paginated or sorted. Given the tool's simplicity, more completeness is expected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the parameter description is already in the input schema. The tool description adds no additional meaning beyond what the schema provides, which meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Lists' and the resource 'all pages in a LogSeq graph', which is specific and distinct from sibling tools like 'find_pages_by_property' or 'get_page_content'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'get_pages_from_namespace' or 'get_pages_tree_from_namespace'. The description lacks context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queryA
Execute a Logseq DSL query to search pages and blocks. Supports property queries, tag queries, task queries, and logical combinations. See https://docs.logseq.com/#/page/queries for query syntax.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Logseq DSL query string (e.g., '(page-property status active)', '(and (task todo) (page [[Project]]))') | |
| limit | No | Maximum number of results to return | |
| result_type | No | Filter results by type | all |
| format | No | Output format (text or json). JSON returns raw result objects including block UUIDs and page info for deep linking. | text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, description partially covers behavior: it searches pages/blocks, supports various queries. However, it doesn't clarify mutability (likely read-only), return format details beyond schema, error handling, or performance implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus a link, front-loaded with key information. Every part is necessary and succinct.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 params, full schema coverage, no output schema, and no annotations, the description adequately explains purpose and provides a reference for syntax. Could be more complete with return structure or examples, but sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. Description adds general context but no new parameter-specific information. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it executes a Logseq DSL query to search pages and blocks, listing supported query types and providing a link to syntax. Distinguishes from sibling tools like search by focusing on DSL queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like search or find_pages_by_property. Implies use for complex DSL queries but lacks direct comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_pageA
Rename an existing page. All references throughout the graph will be automatically updated.
| Name | Required | Description | Default |
|---|---|---|---|
| old_name | Yes | Current name of the page | |
| new_name | Yes | New name for the page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the critical behavior that all references are automatically updated, which is key for an AI agent to anticipate side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences with no extraneous information. Essential purpose and side effect are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema and no annotations, the description provides sufficient context: purpose, parameters implied, and the key side effect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The description adds no additional semantics beyond the schema, so it meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action 'rename' and the resource 'an existing page', with a unique side effect (automatic reference updates) that distinguishes it from sibling tools like update_page or delete_page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is used for renaming pages but does not explicitly state when to use it over alternatives like update_page or provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchC
Search for content across LogSeq pages, blocks, and files
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query text | |
| limit | No | Maximum number of results to return | |
| include_blocks | No | Include block content results | |
| include_pages | No | Include page name results | |
| include_files | No | Include file name results | |
| format | No | Output format (text or json). JSON includes block UUIDs and page identifiers for deep linking. | text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states 'search for content' but does not mention read-only nature, performance implications, response structure, or any side effects. The agent cannot assess safety or cost.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence. While it is front-loaded and brief, it could be slightly expanded to include behavioral context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite full schema coverage, the description lacks important context such as what types of content are searched (fuzzy match?), response format beyond the format parameter, and any search semantics. For a complex search tool with six parameters, the description is too brief.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add any additional meaning beyond the schema. Each parameter is well-defined in the schema, so no penalty for missing description-level detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches across LogSeq pages, blocks, and files. It identifies the main resource and action, but does not differentiate from the sibling 'query' tool which might have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this search tool versus alternatives like 'query' or other tools. There are no usage examples, prerequisites, or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_block_propertiesA
Set properties on a block in Logseq DB-mode. Properties must be defined on the block's tag/class. Use property display names (e.g. 'Content status', not the internal ident).
| Name | Required | Description | Default |
|---|---|---|---|
| block_uuid | Yes | UUID of the block to update | |
| properties | Yes | Properties to set as {name: value} pairs. Use display names (e.g. 'Content status': 'kiem') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It mentions a precondition (properties must be defined on tag/class) but does not explain side effects like whether existing properties are overwritten, error handling, or return values. This is inadequate for a mutation tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, each serving a distinct purpose: stating the action, adding a constraint, and providing a usage example. There is no redundant or unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple set operation with two parameters and no output schema, the description covers the essential: what it does, a key constraint, and a formatting guideline. It could be improved by clarifying whether properties are merged or replaced, but given the tool's simplicity, it is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining that property names must be display names (not internal identifiers) and that properties must be defined on the block's tag/class, which is a critical constraint not evident from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action (set properties), the target (a block in Logseq DB-mode), and adds specificity with constraints on property definitions and display names, effectively distinguishing it from sibling tools like update_block.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on how to use the tool (use display names, properties must be defined on tag/class), but does not explicitly state when to prefer this over alternatives or when not to use it. A sibling like update_block exists but no differentiation is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_blockB
Update the content of an existing LogSeq block by UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| block_uuid | Yes | UUID of the block to update | |
| content | Yes | New content that replaces the block text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Lacks details on destructive behavior, permissions, side effects, or error handling. Without annotations, the description should be more transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, 11 words, front-loaded with key action and scope, no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple 2-param update, but missing context on block existence requirements or return behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. Description adds no extra meaning beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb (update), resource (block), and scope (by UUID), distinguishing it from sibling tools like insert_nested_block or get_block.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs. alternatives (e.g., set_block_properties), or prerequisites like block existence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pageA
Update a page in Logseq with new content and/or properties.
Supports two modes:
append: Add new blocks after existing content (default)
replace: Clear all existing blocks and add new content
Markdown is parsed into proper block hierarchy just like create_page. YAML frontmatter in content will be merged with explicit properties.
| Name | Required | Description | Default |
|---|---|---|---|
| page_name | Yes | Name of the page to update | |
| content | No | Markdown content to add or replace with | |
| mode | No | append: add after existing content. replace: clear page and add new content. | append |
| properties | No | Page properties to set/update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: two modes, Markdown parsing, YAML frontmatter merging. However, it does not mention what happens if the page doesn't exist, error handling, or side effects like irreversible deletion in replace mode. The disclosure is adequate but not complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise paragraphs: first states purpose, second details modes and behavior. Every sentence adds information with no filler. Front-loaded with the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no output schema, the description covers modes, content processing, and property merging. It references create_page for context. Lacks return value description and error conditions, but otherwise sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description adds value by explaining that 'mode' defaults to 'append', Markdown is parsed into block hierarchy, and YAML frontmatter in content merges with explicit properties. This goes beyond the schema's brief descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it updates a Logseq page with content/properties, explains two modes (append/replace), and distinguishes from create_page by implying modification of existing pages. The verb 'update' and the resource 'page' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus siblings like create_page or delete_page. The description mentions that Markdown parsing is 'just like create_page' but does not provide when-to-use or when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct operation or query on pages or blocks. Overlaps like search vs query are differentiated by DSL vs free-text, and property search is a simpler alternative. All tools have clear, non-overlapping purposes.
All tools follow a consistent verb_noun pattern in snake_case (e.g., create_page, delete_block, list_pages). The verbs are uniform (create, delete, get, update, rename, list, find, search, query, insert, set), ensuring predictable naming.
17 tools is slightly above the ideal 3-15 range but still justifiable for a rich knowledge management domain. The count reflects thorough coverage of page and block operations without being excessive.
Core CRUD operations for pages and blocks are present along with property management, backlinks, namespace queries, and search/query. Minor gaps like block movement or batch operations exist, but the surface is largely complete for typical LogSeq interactions.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Notes, kanban tasks, and a capture inbox: read and create Flow data with a personal token.
MCP-native open-source Notion alternative: read & write pages, databases and kanban boards.
Search, read and create Linear issues, projects, teams and cycles.
Create, validate, edit, export (markdown/svg/png/mermaid), and search JSON Canvas files.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with your local Logseq knowledge base through advanced search, content creation, template management, and knowledge organization with privacy-first, local-only operations.357MIT
- AlicenseBqualityCmaintenanceEnables AI assistants like Claude to directly read, write, search, and navigate your local Logseq knowledge graph, including managing journals, pages, backlinks, and page relationships without manual copy-pasting.11146MIT
- AlicenseNot gradedqualityBmaintenanceEnables external AI assistants to interact with Logseq graphs through 34 specialized tools for managing pages, blocks, journals, and tasks via the local HTTP API.MIT
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to Logseq knowledge graphs to read, write, and search pages, blocks, and journals via the Model Context Protocol. It features 17 tools for full graph management, including CRUD operations, batch block insertion, and full-text search.35Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/ergut/mcp-logseq'
If you have feedback or need assistance with the MCP directory API, please join our Discord server