feat(mcp): add tool presets and audit commands

- Introduce reference MCP presets with installation/audit helpers and remove legacy connector lists.
- Add CLI `owlen tools` commands to install presets or audit configuration, with optional pruning.
- Extend the TUI :tools command to support listing presets, installing them, and auditing current configuration.
- Document the preset workflow and provide regression tests for preset application.
This commit is contained in:
2025-10-25 05:14:28 +02:00
parent c3a92a092b
commit 1994367a2e
22 changed files with 871 additions and 76 deletions

View File

@@ -80,7 +80,7 @@ fn generate_text_descriptor() -> McpToolDescriptor {
/// Tool descriptor for resources/get (read file)
fn resources_get_descriptor() -> McpToolDescriptor {
McpToolDescriptor {
name: "resources/get".to_string(),
name: "resources_get".to_string(),
description: "Read and return the TEXT CONTENTS of a single FILE. Use this to read the contents of code files, config files, or text documents. Do NOT use for directories.".to_string(),
input_schema: json!({
"type": "object",
@@ -97,7 +97,7 @@ fn resources_get_descriptor() -> McpToolDescriptor {
/// Tool descriptor for resources/list (list directory)
fn resources_list_descriptor() -> McpToolDescriptor {
McpToolDescriptor {
name: "resources/list".to_string(),
name: "resources_list".to_string(),
description: "List the NAMES of all files and directories in a directory. Use this to see what files exist in a folder, or to list directory contents. Returns an array of file/directory names.".to_string(),
input_schema: json!({
"type": "object",
@@ -324,7 +324,7 @@ async fn main() -> anyhow::Result<()> {
};
// Dispatch based on the requested tool name.
// Handle resources tools manually.
if call.name.starts_with("resources/get") {
if call.name.starts_with("resources_get") {
let path = call
.arguments
.get("path")
@@ -376,7 +376,7 @@ async fn main() -> anyhow::Result<()> {
}
}
}
if call.name.starts_with("resources/list") {
if call.name.starts_with("resources_list") {
let path = call
.arguments
.get("path")