Some checks failed
Test / rust-fmt-check (pull_request) Failing after 2m12s
Test / frontend-typecheck (pull_request) Successful in 2m23s
Test / frontend-tests (pull_request) Successful in 2m22s
Test / rust-clippy (pull_request) Successful in 3m55s
Test / rust-tests (pull_request) Successful in 5m10s
PR Review Automation / review (pull_request) Failing after 11m6s
Adds full Model Context Protocol (MCP) server management, enabling the
AI assistant to discover and call tools from external MCP servers during
triage conversations.
Backend (Rust):
- rmcp 1.7.0 dependency (client + stdio + Streamable HTTP transports)
- Migration 018: mcp_servers, mcp_tools, mcp_resources tables with
CHECK constraints for transport_type, auth_type, discovery_status
- src/mcp/ module: models, store, client, adapter, discovery, commands,
transport/{stdio,http}
- AppState gains mcp_connections: Arc<TokioMutex<HashMap<...>>>
- .setup() hook auto-discovers enabled servers at startup
- 8 new Tauri commands wired into invoke_handler
- execute_mcp_tool_call: PII scan + mandatory audit_log before execution
- Auth values encrypted at rest via integrations::auth::encrypt_token();
scrubbed before any frontend response
Frontend:
- MCPServers.tsx settings page (/settings/mcp) with server list,
status badges, Discover Now, Add/Edit modal, enable/disable toggle
- tauriCommands.ts: McpServer, McpTool, McpServerStatus types + 8 cmds
- App.tsx: Plug icon, /settings/mcp route, sidebar nav entry
Tests (TDD): 15 new tests, all green
- 5 migration tests (written before migration, red → green)
- 5 store CRUD + encryption tests
- 5 adapter sanitization + conversion tests
Verification: 185/185 Rust, 94/94 Vitest, clippy -D warnings: 0
49 lines
1.6 KiB
Rust
49 lines
1.6 KiB
Rust
use crate::ai::{ParameterProperty, Tool, ToolParameters};
|
|
use std::collections::HashMap;
|
|
|
|
/// Get all statically-registered tools for AI function calling.
|
|
pub fn get_available_tools() -> Vec<Tool> {
|
|
vec![get_add_ado_comment_tool()]
|
|
}
|
|
|
|
/// Fetch tools from all connected, enabled MCP servers.
|
|
pub async fn get_enabled_mcp_tools(state: &crate::state::AppState) -> Vec<Tool> {
|
|
crate::mcp::adapter::get_enabled_mcp_tools(state)
|
|
.await
|
|
.unwrap_or_default()
|
|
}
|
|
|
|
/// Tool definition for adding comments to Azure DevOps work items
|
|
fn get_add_ado_comment_tool() -> Tool {
|
|
let mut properties = HashMap::new();
|
|
|
|
properties.insert(
|
|
"work_item_id".to_string(),
|
|
ParameterProperty {
|
|
prop_type: "integer".to_string(),
|
|
description: "The Azure DevOps work item ID (ticket number) to add the comment to"
|
|
.to_string(),
|
|
enum_values: None,
|
|
},
|
|
);
|
|
|
|
properties.insert(
|
|
"comment_text".to_string(),
|
|
ParameterProperty {
|
|
prop_type: "string".to_string(),
|
|
description: "The text content of the comment to add to the work item".to_string(),
|
|
enum_values: None,
|
|
},
|
|
);
|
|
|
|
Tool {
|
|
name: "add_ado_comment".to_string(),
|
|
description: "Add a comment to an Azure DevOps work item (ticket). Use this when the user asks you to add a comment, update a ticket, or provide information to a ticket.".to_string(),
|
|
parameters: ToolParameters {
|
|
param_type: "object".to_string(),
|
|
properties,
|
|
required: vec!["work_item_id".to_string(), "comment_text".to_string()],
|
|
},
|
|
}
|
|
}
|