mirror of
https://github.com/logseq/logseq.git
synced 2026-04-24 22:25:01 +00:00
enhance: list* tools default to minimal info
Provide expand option to provide additional detail
This commit is contained in:
15
deps/cli/src/logseq/cli/commands/mcp_server.cljs
vendored
15
deps/cli/src/logseq/cli/commands/mcp_server.cljs
vendored
@@ -15,14 +15,17 @@
|
||||
(cli-common-mcp-server/mcp-success-response resp)
|
||||
(cli-common-mcp-server/mcp-error-response (str "Error: Page " (pr-str (aget args "pageName")) " not found"))))
|
||||
|
||||
(defn- local-list-pages [conn _args]
|
||||
(cli-common-mcp-server/mcp-success-response (cli-common-mcp-tools/list-pages @conn)))
|
||||
(defn- local-list-pages [conn args]
|
||||
(cli-common-mcp-server/mcp-success-response
|
||||
(cli-common-mcp-tools/list-pages @conn {:expand (aget args "expand")})))
|
||||
|
||||
(defn- local-list-properties [conn _args]
|
||||
(cli-common-mcp-server/mcp-success-response (cli-common-mcp-tools/list-properties @conn)))
|
||||
(defn- local-list-properties [conn args]
|
||||
(cli-common-mcp-server/mcp-success-response
|
||||
(cli-common-mcp-tools/list-properties @conn {:expand (aget args "expand")})))
|
||||
|
||||
(defn- local-list-tags [conn _args]
|
||||
(cli-common-mcp-server/mcp-success-response (cli-common-mcp-tools/list-tags @conn)))
|
||||
(defn- local-list-tags [conn args]
|
||||
(cli-common-mcp-server/mcp-success-response
|
||||
(cli-common-mcp-tools/list-tags @conn {:expand (aget args "expand")})))
|
||||
|
||||
(defn- local-upsert-nodes [conn args]
|
||||
(cli-common-mcp-server/mcp-success-response
|
||||
|
||||
26
deps/cli/src/logseq/cli/common/mcp/server.cljs
vendored
26
deps/cli/src/logseq/cli/common/mcp/server.cljs
vendored
@@ -97,16 +97,16 @@
|
||||
(call-api-fn "logseq.cli.getPageData" [(aget args "pageName")]))
|
||||
|
||||
(defn- api-list-pages
|
||||
[call-api-fn _args]
|
||||
(call-api-fn "logseq.cli.listPages" []))
|
||||
[call-api-fn args]
|
||||
(call-api-fn "logseq.cli.listPages" [#js {:expand (aget args "expand")}]))
|
||||
|
||||
(defn- api-list-tags
|
||||
[call-api-fn _args]
|
||||
(call-api-fn "logseq.cli.listTags" []))
|
||||
[call-api-fn args]
|
||||
(call-api-fn "logseq.cli.listTags" [#js {:expand (aget args "expand")}]))
|
||||
|
||||
(defn- api-list-properties
|
||||
[call-api-fn _args]
|
||||
(call-api-fn "logseq.cli.listProperties" []))
|
||||
[call-api-fn args]
|
||||
(call-api-fn "logseq.cli.listProperties" [#js {:expand (aget args "expand")}]))
|
||||
|
||||
(defn- api-search-blocks
|
||||
[call-api-fn args]
|
||||
@@ -121,7 +121,9 @@
|
||||
{:listPages
|
||||
{:fn api-list-pages
|
||||
:config #js {:title "List Pages"
|
||||
:description "List all pages in a graph"}}
|
||||
:description "List all pages in a graph"
|
||||
:inputSchema
|
||||
#js {:expand (-> (z/boolean) .optional (.describe "Provide additional detail on each page"))}}}
|
||||
:getPage
|
||||
{:fn api-get-page
|
||||
:config #js {:title "Get Page"
|
||||
@@ -189,7 +191,7 @@
|
||||
:entityType (z/enum #js ["block" "page" "tag" "property"])
|
||||
:id (.optional (z/union #js [(z/string) (z/number) (z/null)]))
|
||||
:data (-> (z/object #js {}) (.passthrough))}))
|
||||
:dry-run (-> (z/boolean) (.describe "Pretend to do batch update. Does everything except actually commit change to db e.g. validation."))}}}
|
||||
:dry-run (-> (z/boolean) .optional (.describe "Pretend to do batch update. Does everything except actually commit change to db e.g. validation."))}}}
|
||||
:searchBlocks
|
||||
{:fn api-search-blocks
|
||||
:config #js {:title "Search Blocks"
|
||||
@@ -198,11 +200,15 @@
|
||||
:listTags
|
||||
{:fn api-list-tags
|
||||
:config #js {:title "List Tags"
|
||||
:description "List all tags in a graph"}}
|
||||
:description "List all tags in a graph"
|
||||
:inputSchema
|
||||
#js {:expand (-> (z/boolean) .optional (.describe "Provide additional detail on each tag"))}}}
|
||||
:listProperties
|
||||
{:fn api-list-properties
|
||||
:config #js {:title "List Properties"
|
||||
:description "List all properties in a graph"}}})
|
||||
:description "List all properties in a graph"
|
||||
:inputSchema
|
||||
#js {:expand (-> (z/boolean) .optional (.describe "Provide additional detail on each property"))}}}})
|
||||
|
||||
(defn call-api-tool [tool-fn api-fn args]
|
||||
(tool-fn (partial api-tool api-fn) args))
|
||||
|
||||
74
deps/cli/src/logseq/cli/common/mcp/tools.cljs
vendored
74
deps/cli/src/logseq/cli/common/mcp/tools.cljs
vendored
@@ -22,44 +22,50 @@
|
||||
|
||||
(defn list-properties
|
||||
"Main fn for ListProperties tool"
|
||||
[db]
|
||||
[db {:keys [expand]}]
|
||||
(ensure-db-graph db)
|
||||
(->> (d/datoms db :avet :block/tags :logseq.class/Property)
|
||||
(map #(d/entity db (:e %)))
|
||||
#_((fn [x] (prn :prop-keys (distinct (mapcat keys x))) x))
|
||||
(map (fn [e]
|
||||
(cond-> (into {} e)
|
||||
true
|
||||
(dissoc e :block/tags :block/order :block/refs :block/name :db/index
|
||||
:logseq.property.embedding/hnsw-label-updated-at :logseq.property/default-value)
|
||||
true
|
||||
(update :block/uuid str)
|
||||
(:logseq.property/classes e)
|
||||
(update :logseq.property/classes #(mapv :db/ident %))
|
||||
(:logseq.property/description e)
|
||||
(update :logseq.property/description db-property/property-value-content))))))
|
||||
(if expand
|
||||
(cond-> (into {} e)
|
||||
true
|
||||
(dissoc e :block/tags :block/order :block/refs :block/name :db/index
|
||||
:logseq.property.embedding/hnsw-label-updated-at :logseq.property/default-value)
|
||||
true
|
||||
(update :block/uuid str)
|
||||
(:logseq.property/classes e)
|
||||
(update :logseq.property/classes #(mapv :db/ident %))
|
||||
(:logseq.property/description e)
|
||||
(update :logseq.property/description db-property/property-value-content))
|
||||
{:block/title (:block/title e)
|
||||
:block/uuid (str (:block/uuid e))})))))
|
||||
|
||||
(defn list-tags
|
||||
"Main fn for ListTags tool"
|
||||
[db]
|
||||
[db {:keys [expand]}]
|
||||
(ensure-db-graph db)
|
||||
(->> (d/datoms db :avet :block/tags :logseq.class/Tag)
|
||||
(map #(d/entity db (:e %)))
|
||||
(map (fn [e]
|
||||
(cond-> (into {} e)
|
||||
true
|
||||
(dissoc e :block/tags :block/order :block/refs :block/name
|
||||
:logseq.property.embedding/hnsw-label-updated-at)
|
||||
true
|
||||
(update :block/uuid str)
|
||||
(:logseq.property.class/extends e)
|
||||
(update :logseq.property.class/extends #(mapv :db/ident %))
|
||||
(:logseq.property.class/properties e)
|
||||
(update :logseq.property.class/properties #(mapv :db/ident %))
|
||||
(:logseq.property.view/type e)
|
||||
(assoc :logseq.property.view/type (:db/ident (:logseq.property.view/type e)))
|
||||
(:logseq.property/description e)
|
||||
(update :logseq.property/description db-property/property-value-content))))))
|
||||
(if expand
|
||||
(cond-> (into {} e)
|
||||
true
|
||||
(dissoc e :block/tags :block/order :block/refs :block/name
|
||||
:logseq.property.embedding/hnsw-label-updated-at)
|
||||
true
|
||||
(update :block/uuid str)
|
||||
(:logseq.property.class/extends e)
|
||||
(update :logseq.property.class/extends #(mapv :db/ident %))
|
||||
(:logseq.property.class/properties e)
|
||||
(update :logseq.property.class/properties #(mapv :db/ident %))
|
||||
(:logseq.property.view/type e)
|
||||
(assoc :logseq.property.view/type (:db/ident (:logseq.property.view/type e)))
|
||||
(:logseq.property/description e)
|
||||
(update :logseq.property/description db-property/property-value-content))
|
||||
{:block/title (:block/title e)
|
||||
:block/uuid (str (:block/uuid e))})))))
|
||||
|
||||
(defn- get-page-blocks
|
||||
[db page-id]
|
||||
@@ -92,16 +98,20 @@
|
||||
|
||||
(defn list-pages
|
||||
"Main fn for ListPages tool"
|
||||
[db]
|
||||
[db {:keys [expand]}]
|
||||
(ensure-db-graph db)
|
||||
(->> (d/datoms db :avet :block/name)
|
||||
(map #(d/entity db (:e %)))
|
||||
(remove entity-util/hidden?)
|
||||
(map #(-> %
|
||||
;; Until there are options to limit pages, return minimal info to avoid
|
||||
;; exceeding max payload size
|
||||
(select-keys [:block/uuid :block/title :block/created-at :block/updated-at])
|
||||
(update :block/uuid str)))))
|
||||
(map (fn [e]
|
||||
(if expand
|
||||
(-> e
|
||||
;; Until there are options to limit pages, return minimal info to avoid
|
||||
;; exceeding max payload size
|
||||
(select-keys [:block/uuid :block/title :block/created-at :block/updated-at])
|
||||
(update :block/uuid str))
|
||||
{:block/title (:block/title e)
|
||||
:block/uuid (str (:block/uuid e))})))))
|
||||
|
||||
;; upsert-nodes tool
|
||||
;; =================
|
||||
|
||||
Reference in New Issue
Block a user