Skip to content

Commit adc46c2

Browse files
enhance: list tags and properties for local mcp
1 parent 86d64be commit adc46c2

File tree

2 files changed

+44
-2
lines changed

2 files changed

+44
-2
lines changed

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

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
[logseq.db.common.initial-data :as common-initial-data]
1111
[logseq.db.common.sqlite-cli :as sqlite-cli]
1212
[logseq.db.frontend.entity-util :as entity-util]
13+
[logseq.db.frontend.property :as db-property]
1314
[logseq.outliner.tree :as otree]
1415
[nbb.core :as nbb]
1516
[promesa.core :as p]))
@@ -84,13 +85,54 @@
8485
:updatedAt (:block/updated-at e)}))
8586
mcp-success-response))
8687

88+
(defn- local-list-properties [conn _args]
89+
(->> (d/datoms @conn :avet :block/tags :logseq.class/Property)
90+
(map #(d/entity @conn (:e %)))
91+
#_((fn [x] (prn :prop-keys (distinct (mapcat keys x))) x))
92+
(map (fn [e]
93+
(cond-> (into {} e)
94+
true
95+
(dissoc e :block/tags :block/order :block/refs :block/name :db/index
96+
:logseq.property.embedding/hnsw-label-updated-at :logseq.property/default-value)
97+
true
98+
(update :block/uuid str)
99+
(:logseq.property/classes e)
100+
(update :logseq.property/classes #(mapv :db/ident %))
101+
(:logseq.property/description e)
102+
(update :logseq.property/description db-property/property-value-content))))
103+
mcp-success-response))
104+
105+
(defn- local-list-tags [conn _args]
106+
(->> (d/datoms @conn :avet :block/tags :logseq.class/Tag)
107+
(map #(d/entity @conn (:e %)))
108+
(map (fn [e]
109+
(cond-> (into {} e)
110+
true
111+
(dissoc e :block/tags :block/order :block/refs :block/name
112+
:logseq.property.embedding/hnsw-label-updated-at)
113+
true
114+
(update :block/uuid str)
115+
(:logseq.property.class/extends e)
116+
(update :logseq.property.class/extends #(mapv :db/ident %))
117+
(:logseq.property.class/properties e)
118+
(update :logseq.property.class/properties #(mapv :db/ident %))
119+
(:logseq.property.view/type e)
120+
(update :logseq.property.view/type :db/ident)
121+
(:logseq.property/description e)
122+
(update :logseq.property/description db-property/property-value-content))))
123+
mcp-success-response))
124+
87125
(def ^:private local-tools
88126
"MCP Tools when running with a local graph"
89127
(merge-with
90128
merge
91129
api-tools
92130
{:getPage {:fn local-get-page}
93-
:getAllPages {:fn local-get-all-pages}}))
131+
:getAllPages {:fn local-get-all-pages}
132+
:listProperties {:fn local-list-properties
133+
:config #js {:title "List Properties"}}
134+
:listTags {:fn local-list-tags
135+
:config #js {:title "List Tags"}}}))
94136

95137
(defn start [{{:keys [debug-tool graph] :as opts} :opts :as m}]
96138
(when (and graph (not (fs/existsSync (cli-util/get-graph-dir graph))))

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
(mapv (fn [[k v]]
3838
[k
3939
(cond
40-
(#{:block/tags :logseq.property.class/extends} k)
40+
(#{:block/tags :logseq.property.class/extends :logseq.property/classes :logseq.property.class/properties} k)
4141
(mapv :db/ident v)
4242
(and (set? v) (every? de/entity? v))
4343
(set (map db-property/property-value-content v))

0 commit comments

Comments
 (0)