mcp-logseq
# mcp-logseq
Python stdio MCP server for the Logseq local HTTP API.
## Requirements
- Python 3.11+
- Logseq desktop with the HTTP API enabled
- A Logseq API token
In Logseq, enable the HTTP API from settings and copy the token. The server calls Logseq at `http://127.0.0.1:12315/api` by default.
## Install
```bash
python -m venv .venv
.venv/bin/pip install -e ".[dev]"
```
## Configure in Codex
From this project directory, install the package and add the stdio MCP server to Codex:
```bash
python -m venv .venv
.venv/bin/pip install -e .
codex mcp add logseq \
--env LOGSEQ_API_TOKEN=your-token \
--env LOGSEQ_API_URL=http://127.0.0.1:12315/api \
-- "$(pwd)/.venv/bin/mcp-logseq"
```
On Windows PowerShell, use the virtualenv executable under `.venv\Scripts`:
```powershell
py -3.11 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e .
codex mcp add logseq `
--env LOGSEQ_API_TOKEN=your-token `
--env LOGSEQ_API_URL=http://127.0.0.1:12315/api `
-- "$((Get-Location).Path)\.venv\Scripts\mcp-logseq.exe"
```
Replace `your-token` with the token from Logseq. After adding it, restart Codex so the new MCP server is loaded.
If you prefer to edit the config manually, generate the JSON form from this checkout:
```bash
.venv/bin/mcp-logseq --print-config
```
On Windows:
```powershell
.\.venv\Scripts\mcp-logseq.exe --print-config
```
The server is stdio-only for MCP clients. The `LOGSEQ_API_URL` value is the local Logseq HTTP API that this stdio server calls behind the scenes.
### Logseq Setup
1. Open Logseq desktop.
2. Enable the HTTP API in Logseq settings.
3. Copy the API token.
4. Use that token as `LOGSEQ_API_TOKEN` in the `codex mcp add` command.
5. Keep Logseq running while using the MCP server.
## Run
```bash
LOGSEQ_API_TOKEN=your-token mcp-logseq
```
On Windows PowerShell:
```powershell
$env:LOGSEQ_API_TOKEN = "your-token"
.\.venv\Scripts\mcp-logseq.exe
```
The server uses stdio transport by default. Do not run it behind an HTTP server for MCP clients that expect stdio.
Optional environment variables:
- `LOGSEQ_API_URL`: full API URL, default `http://127.0.0.1:12315/api`
- `LOGSEQ_TIMEOUT`: request timeout in seconds, default `15`
## Test
Run the full local test suite:
```bash
.venv/bin/python -m pytest
```
On Windows:
```powershell
.\.venv\Scripts\python.exe -m pytest
```
The suite covers the Logseq HTTP client, environment loading, MCP config generation, stdio startup, and every exported server tool's Logseq API method/argument mapping.
## MCP Client Config
Generate a ready-to-copy config from this checkout:
```bash
.venv/bin/mcp-logseq --print-config
```
On Windows:
```powershell
.\.venv\Scripts\mcp-logseq.exe --print-config
```
Then paste the JSON into your MCP client's config. A static example is also available in `mcp.example.json`.
```json
{
"mcpServers": {
"logseq": {
"command": "/absolute/path/to/mcp-logseq/.venv/bin/mcp-logseq",
"args": [],
"env": {
"LOGSEQ_API_TOKEN": "your-token",
"LOGSEQ_API_URL": "http://127.0.0.1:12315/api"
}
}
}
}
```
Windows manual config example:
```json
{
"mcpServers": {
"logseq": {
"command": "C:\\Users\\you\\path\\to\\mcp-logseq\\.venv\\Scripts\\mcp-logseq.exe",
"args": [],
"env": {
"LOGSEQ_API_TOKEN": "your-token",
"LOGSEQ_API_URL": "http://127.0.0.1:12315/api"
}
}
}
}
```
## Tools
Generic:
- `logseq_call`: call any Logseq API method by name.
App and graph:
- `get_current_graph`
- `get_current_graph_configs`
- `get_current_graph_favorites`
- `get_current_graph_recent`
- `get_current_graph_templates`
- `get_user_configs`
- `get_app_info`
- `check_current_is_db_graph`
Pages and blocks:
- `get_current_page`
- `get_current_block`
- `get_current_page_blocks_tree`
- `get_all_pages`
- `get_page`
- `get_page_blocks_tree`
- `get_page_linked_references`
- `get_page_properties`
- `get_pages_from_namespace`
- `get_pages_tree_from_namespace`
- `get_block`
- `get_block_properties`
- `get_block_property`
- `get_previous_sibling_block`
- `get_next_sibling_block`
- `search`
Queries:
- `query`
- `datascript_query`
Page editing:
- `create_page`
- `create_journal_page`
- `rename_page`
- `delete_page`
Block editing:
- `append_block_in_page`
- `prepend_block_in_page`
- `insert_block`
- `insert_batch_block`
- `move_block`
- `update_block`
- `remove_block`
- `new_block_uuid`
- `set_block_collapsed`
- `set_block_icon`
- `remove_block_icon`
Properties and tags:
- `get_all_tags`
- `get_all_properties`
- `upsert_block_property`
- `remove_block_property`
- `upsert_property`
- `remove_property`
- `create_tag`
- `get_tag`
- `get_tags_by_name`
- `get_tag_objects`
- `add_block_tag`
- `remove_block_tag`
- `add_tag_extends`
- `remove_tag_extends`
- `add_tag_property`
- `remove_tag_property`
Assets and Git:
- `list_asset_files`
- `make_asset_url`
- `open_asset`
- `git_exec`
- `git_load_ignore_file`
- `git_save_ignore_file`
Tools that modify the graph are intentionally direct wrappers around Logseq's API. Use them with explicit page names, UUIDs, and content. Plugin callback/hook APIs are not exposed as first-class tools because a stdio MCP server cannot host interactive Logseq plugin callbacks; use `logseq_call` only for one-shot methods.
TDQS
Scored across 64 tools
Most tools have clearly distinct purposes, but there is some overlap between query/search/datascript_query and get_block_properties/get_block_property, which could cause misselection. Overall, descriptions help differentiate.
The naming convention is largely consistent with verb_noun snake_case (e.g., get_block, create_page). However, a few outliers like check_current_is_db_graph, git_exec, and logseq_call deviate from the pattern, causing minor inconsistency.
The 64 tools are excessive for typical MCP servers (usually 3-15). While Logseq has many features, this number may overwhelm agents, leading to poor selection and increased complexity.
The tool set covers nearly all aspects of Logseq: blocks, pages, tags, properties, graphs, configs, Git, assets, queries. There are no obvious gaps; users can perform full CRUD and lifecycle operations.