assay_core/mcp/tool_call_handler/
mod.rs1mod emit;
8mod evaluate;
9mod evaluate_next;
10mod types;
11
12pub use types::{HandleResult, ToolCallHandler, ToolCallHandlerConfig};
13
14use super::decision::DecisionEmitter;
15use super::identity::ToolIdentity;
16use super::jsonrpc::JsonRpcRequest;
17use super::lifecycle::LifecycleEmitter;
18use super::policy::{McpPolicy, PolicyState};
19use super::tool_definition::ToolDefinitionBinding;
20use crate::runtime::{Authorizer, MandateData};
21use serde_json::Value;
22use std::sync::Arc;
23
24impl ToolCallHandler {
25 pub fn new(
27 policy: McpPolicy,
28 authorizer: Option<Authorizer>,
29 emitter: Arc<dyn DecisionEmitter>,
30 config: ToolCallHandlerConfig,
31 ) -> Self {
32 types::new_handler(policy, authorizer, emitter, config)
33 }
34
35 pub fn with_lifecycle_emitter(self, emitter: Arc<dyn LifecycleEmitter>) -> Self {
37 types::with_lifecycle_emitter(self, emitter)
38 }
39
40 pub fn handle_tool_call(
45 &self,
46 request: &JsonRpcRequest,
47 state: &mut PolicyState,
48 runtime_identity: Option<&ToolIdentity>,
49 mandate: Option<&MandateData>,
50 transaction_object: Option<&Value>,
51 ) -> HandleResult {
52 evaluate::handle_tool_call(
53 self,
54 request,
55 state,
56 runtime_identity,
57 None,
58 mandate,
59 transaction_object,
60 )
61 }
62
63 pub fn handle_tool_call_with_tool_definition_binding(
69 &self,
70 request: &JsonRpcRequest,
71 state: &mut PolicyState,
72 runtime_identity: Option<&ToolIdentity>,
73 tool_definition_binding: Option<&ToolDefinitionBinding>,
74 mandate: Option<&MandateData>,
75 transaction_object: Option<&Value>,
76 ) -> HandleResult {
77 evaluate::handle_tool_call(
78 self,
79 request,
80 state,
81 runtime_identity,
82 tool_definition_binding,
83 mandate,
84 transaction_object,
85 )
86 }
87}
88
89#[cfg(test)]
90mod tests;