Skip to content

Commit 15a5f29

Browse files
Merge pull request #12111 from logseq/feat/mcp-server
Feat: Add MCP server
2 parents 0ece595 + b59164f commit 15a5f29

File tree

30 files changed

+1924
-74
lines changed

30 files changed

+1924
-74
lines changed

.clj-kondo/config.edn

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,14 @@
164164
frontend.worker.state worker-state
165165
frontend.worker.util worker-util
166166
lambdaisland.glogi log
167+
logseq.api.db-based db-based-api
167168
logseq.cli.common.graph cli-common-graph
168-
logseq.cli.text-util cli-text-util
169169
logseq.cli.common.export.common cli-export-common
170170
logseq.cli.common.export.text cli-export-text
171171
logseq.cli.common.file common-file
172+
logseq.cli.common.mcp.server cli-common-mcp-server
173+
logseq.cli.common.mcp.tools cli-common-mcp-tools
174+
logseq.cli.text-util cli-text-util
172175
logseq.common.config common-config
173176
logseq.common.date-time-util date-time-util
174177
logseq.common.graph common-graph
@@ -219,6 +222,7 @@
219222
logseq.outliner.op outliner-op
220223
logseq.outliner.page outliner-page
221224
logseq.outliner.pipeline outliner-pipeline
225+
logseq.outliner.tree otree
222226
logseq.outliner.validate outliner-validate
223227
logseq.shui.popup.core shui-popup
224228
logseq.shui.ui shui

deps/cli/.carve/ignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ logseq.cli.commands.query/query
66
logseq.cli.commands.search/search
77
logseq.cli.commands.export/export
88
logseq.cli.commands.append/append
9+
logseq.cli.commands.mcp-server/start

deps/cli/.clj-kondo/config.edn

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
clojure.string string
1313
datascript.core d
1414
logseq.cli.commands.graph cli-graph
15+
logseq.cli.common.mcp.server cli-common-mcp-server
16+
logseq.cli.common.mcp.tools cli-common-mcp-tools
1517
logseq.cli.common.graph cli-common-graph
1618
logseq.cli.common.export.text cli-export-text
1719
logseq.cli.common.export.common cli-export-common

deps/cli/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,13 @@ Exported 16 properties, 16 classes and 36 pages
125125
# Append text to current page
126126
$ logseq append add this text -a my-token
127127
Success!
128+
129+
# Start mcp-server against a local desktop graph
130+
$ logseq mcp-server -g yep
131+
MCP Streamable HTTP Server started on 127.0.0.1:12315
132+
# Start mcp-server against a local graph file
133+
$ logseq mcp-server -g ~/Downloads/logseq_db_yep_1751032977.sqlite
134+
MCP Streamable HTTP Server started on 127.0.0.1:12315
128135
```
129136

130137
## API

deps/cli/bb.edn

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,5 @@
4040

4141
:tasks/config
4242
{:large-vars
43-
{:max-lines-count 45
43+
{:max-lines-count 50
4444
:metadata-exceptions #{:large-vars/cleanup-todo}}}}

deps/cli/package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@
1111
"license": "MIT",
1212
"dependencies": {
1313
"@logseq/nbb-logseq": "github:logseq/nbb-logseq#feat-db-v29",
14+
"@modelcontextprotocol/sdk": "^1.17.5",
1415
"better-sqlite3": "~11.10.0",
16+
"fastify": "5.3.2",
1517
"fs-extra": "^11.3.0",
1618
"jszip": "3.8.0",
17-
"mldoc": "^1.5.9"
19+
"mldoc": "^1.5.9",
20+
"zod": "^4.1.5"
1821
},
1922
"repository": {
2023
"type": "git",

deps/cli/src/logseq/cli.cljs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@
9999
:fn (lazy-load-fn 'logseq.cli.commands.append/append)
100100
:args->opts [:args] :require [:args] :coerce {:args []}
101101
:spec cli-spec/append}
102+
{:cmds ["mcp-server"] :desc "Run a MCP server"
103+
:description "Run a MCP server against a local graph if --graph is given or against the current in-app graph. By default the MCP server runs as a HTTP Streamable server. Use --stdio to run it as a stdio server."
104+
:fn (lazy-load-fn 'logseq.cli.commands.mcp-server/start)
105+
:spec cli-spec/mcp-server}
102106
{:cmds ["help"] :fn help-command :desc "Print a command's help"
103107
:args->opts [:command] :require [:command]}
104108
{:cmds []

deps/cli/src/logseq/cli/commands/export.cljs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
(println "Exported" (count exported-files) "pages to" file-name)))))
7575

7676
(defn export [{{:keys [graph] :as opts} :opts}]
77-
(if (fs/existsSync (cli-util/get-graph-dir graph))
77+
(if (fs/existsSync (cli-util/get-graph-path graph))
7878
(let [conn (apply sqlite-cli/open-db! (cli-util/->open-db-args graph))]
7979
(export-repo-as-markdown! (str common-config/db-version-prefix graph) @conn opts))
8080
(cli-util/error "Graph" (pr-str graph) "does not exist")))

deps/cli/src/logseq/cli/commands/export_edn.cljs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
[logseq.cli.util :as cli-util]))
99

1010
(defn export [{{:keys [graph] :as options} :opts}]
11-
(if (fs/existsSync (cli-util/get-graph-dir graph))
11+
(if (fs/existsSync (cli-util/get-graph-path graph))
1212
(let [conn (apply sqlite-cli/open-db! (cli-util/->open-db-args graph))
1313
export-map (sqlite-export/build-export @conn
1414
(cond-> {:export-type (:export-type options)}

deps/cli/src/logseq/cli/commands/graph.cljs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
(defn show-graph
2020
[{{:keys [graphs]} :opts}]
2121
(doseq [graph graphs]
22-
(let [graph-dir (cli-util/get-graph-dir graph)]
22+
(let [graph-dir (cli-util/get-graph-path graph)]
2323
(if (fs/existsSync graph-dir)
2424
(let [conn (apply sqlite-cli/open-db! (cli-util/->open-db-args graph))
2525
kv-value #(:kv/value (d/entity @conn %))]

0 commit comments

Comments
 (0)