|
10 | 10 | [logseq.db.common.initial-data :as common-initial-data]
|
11 | 11 | [logseq.db.common.sqlite-cli :as sqlite-cli]
|
12 | 12 | [logseq.db.frontend.entity-util :as entity-util]
|
| 13 | + [logseq.db.frontend.property :as db-property] |
13 | 14 | [logseq.outliner.tree :as otree]
|
14 | 15 | [nbb.core :as nbb]
|
15 | 16 | [promesa.core :as p]))
|
|
84 | 85 | :updatedAt (:block/updated-at e)}))
|
85 | 86 | mcp-success-response))
|
86 | 87 |
|
| 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 | + |
87 | 125 | (def ^:private local-tools
|
88 | 126 | "MCP Tools when running with a local graph"
|
89 | 127 | (merge-with
|
90 | 128 | merge
|
91 | 129 | api-tools
|
92 | 130 | {: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"}}})) |
94 | 136 |
|
95 | 137 | (defn start [{{:keys [debug-tool graph] :as opts} :opts :as m}]
|
96 | 138 | (when (and graph (not (fs/existsSync (cli-util/get-graph-dir graph))))
|
|
0 commit comments