v1.0.0
New Features
- 22 standard tools — 13 new tools added on top of the original 9:
delete_block,delete_page,update_block,update_page,insert_nested_block,rename_page,set_block_properties(DB-mode),search,query,find_pages_by_property,get_pages_from_namespace,get_page_backlinks,get_pages_tree_from_namespace - Optional vector search —
vector_searchandvector_db_statustools via LanceDB;logseq-syncCLI builds and watches the index; activated byLOGSEQ_VECTOR_ENABLED=truewith the[vector]extra - DB-mode support — set
LOGSEQ_DB_MODE=trueto target Logseq's SQLite database format; unlocksset_block_properties, UUID-reference resolution inget_all_page_content, and Datalog-poweredfind_pages_by_property - Privacy / exclude-tags —
LOGSEQ_EXCLUDE_TAGShides tagged pages from all read operations:get_all_pages,search,query,find_pages_by_property,get_page_backlinks, andget_all_page_content(access-denied guard) - Structured logging — rotating file handler (
~/.cache/logseq-api-mcp/server.log), stderr fallback, configurable viaLOGSEQ_LOG_LEVEL - Markdown parser —
parse_content()converts markdown strings intoParsedContent(blocks, properties)used bycreate_pageandupdate_page get_all_pages— newinclude_journalsfilter parameterget_all_page_content— newformat,max_depth, andresolve_refsparameters; DB-mode UUID-reference expansionget_block_content— newformat,include_children, and DB-mode property resolution parametersget_page_backlinks— renamed fromget_page_linksalias; newinclude_contentparametercreate_page— content parameter uses markdown parser for block ingestion with frontmatter support.claude-plugin/—plugin.json(MCP server manifest) andmarketplace.json(Claude marketplace metadata)
Architecture
- Injected-client pattern — all 22 tools split into
_run(client, config, ...)(testable) and a public MCP-facing wrapper; zeroaiohttppatching in tool tests LogseqClient— async aiohttp wrapper for every Logseq API call with SSL control and DB-mode methods (datascript_query,resolve_page_uuids,get_blocks_db_properties,resolve_property_ident,upsert_block_property)LogseqConfig— frozen dataclass replacing raw env-var reads in every tool- Pure formatter modules —
src/tools/formatters/pages.py,blocks.py,search.pyextracted as zero-mock-testable pure functions src/privacy/exclude_tags.py—extract_tags,is_page_excluded,filter_pagespure functionssrc/vector/—VectorConfig,sync_graph,watch_graph,vector_search,vector_db_status,cli_entry
Testing
- Test suite expanded from ~68 to 345 tests with 87% coverage
- Coverage gate raised from 80% to 85% (≥85% required for CI to pass)
- New test directories:
tests/client/,tests/parser/,tests/privacy/,tests/tools/formatters/,tests/vector/
CI/CD
ci.yml— matrix now includes Python 3.12 +[vector]group; coverage gate raised to 85%; tool-count step verifies all 22 standard tools are presentquality.yml— mypy now targets all new source modules (src/client/,src/privacy/,src/parser/,src/tools/,src/vector/)pr-validation.yml(new) — three-job PR gate: tool count ≥21, coverage ≥85%, ruff lint + format
Documentation
README.md— complete rewrite: pain-point hook in first 43 words, dark/light SVG architecture diagram via<picture>, 22-tool tables, environment variables table, DB-mode/privacy/vector sectionsCLAUDE.md— updated with full module map,FakeLogseqClienttest pattern, all env vars, and TDD invariantsassets/architecture-dark.svg+assets/architecture-light.svg— hand-crafted SVGs with automatic GitHub dark/light mode switching
Upgrade Notes
No breaking changes to existing tools (
get_all_pages,get_page_blocks,get_page_links,get_block_content,get_all_page_content,get_linked_flashcards,append_block_in_page,create_page,edit_block).New environment variables (
LOGSEQ_DB_MODE,LOGSEQ_EXCLUDE_TAGS,LOGSEQ_LOG_LEVEL,LOGSEQ_VECTOR_*) are optional with safe defaults — existing.envfiles continue to work without changes.The
[vector]dependency group is opt-in:uv sync --group vector. Vector tools only register whenLOGSEQ_VECTOR_ENABLED=true.