|
152 | 152 | (is (= #{"plan_tool"} |
153 | 153 | (#'f.tools/get-disabled-tools config "plan")))))) |
154 | 154 |
|
| 155 | +(deftest disabled-tools-matching-test |
| 156 | + (let [db {:mcp-clients {"clojureMCP" |
| 157 | + {:version "1.0.2" |
| 158 | + :tools [{:name "eval" :description "eval code" :parameters {}} |
| 159 | + {:name "sync_deps" :description "sync deps" :parameters {}}]}}} |
| 160 | + full-names (fn [config] (set (map :full-name (f.tools/all-tools "123" "code" db config))))] |
| 161 | + (testing "exact builtin tool short name (existing behavior)" |
| 162 | + (let [names (full-names {:disabledTools ["edit_file"]})] |
| 163 | + (is (not (contains? names "eca__edit_file"))) |
| 164 | + (is (contains? names "eca__read_file")))) |
| 165 | + (testing "exact full name (existing behavior)" |
| 166 | + (let [names (full-names {:disabledTools ["clojureMCP__eval"]})] |
| 167 | + (is (not (contains? names "clojureMCP__eval"))) |
| 168 | + (is (contains? names "clojureMCP__sync_deps")))) |
| 169 | + (testing "regex against builtin tool short names" |
| 170 | + (let [names (full-names {:disabledTools [".*_file"]})] |
| 171 | + (is (not (contains? names "eca__edit_file"))) |
| 172 | + (is (not (contains? names "eca__write_file"))) |
| 173 | + (is (not (contains? names "eca__move_file"))) |
| 174 | + (is (not (contains? names "eca__read_file"))))) |
| 175 | + (testing "server name disables all tools of that server" |
| 176 | + (let [names (full-names {:disabledTools ["clojureMCP"]})] |
| 177 | + (is (not (contains? names "clojureMCP__eval"))) |
| 178 | + (is (not (contains? names "clojureMCP__sync_deps"))) |
| 179 | + (is (contains? names "eca__read_file")))) |
| 180 | + (testing "regex against full names" |
| 181 | + (let [names (full-names {:disabledTools ["clojureMCP.*"]})] |
| 182 | + (is (not (contains? names "clojureMCP__eval"))) |
| 183 | + (is (not (contains? names "clojureMCP__sync_deps"))) |
| 184 | + (is (contains? names "eca__read_file")))) |
| 185 | + (testing "bare MCP tool name does not match" |
| 186 | + (let [names (full-names {:disabledTools ["eval"]})] |
| 187 | + (is (contains? names "clojureMCP__eval")))) |
| 188 | + (testing "invalid regex is treated literally and does not throw" |
| 189 | + (let [names (full-names {:disabledTools ["eval(" "clojureMCP__eval"]})] |
| 190 | + (is (not (contains? names "clojureMCP__eval"))) |
| 191 | + (is (contains? names "clojureMCP__sync_deps")))) |
| 192 | + (testing "server name works per agent" |
| 193 | + (let [names (full-names {:agent {"code" {:disabledTools ["clojureMCP"]}}})] |
| 194 | + (is (not (contains? names "clojureMCP__eval"))) |
| 195 | + (is (contains? names "eca__read_file")))))) |
| 196 | + |
155 | 197 | (deftest approval-test |
156 | 198 | (let [read-tool {:name "read" :server {:name "eca"} :origin :native} |
157 | 199 | write-tool {:name "write" :server {:name "eca"} :origin :native} |
|
0 commit comments