dnslib/mcp/tools/
access_lists.rs1use rmcp::{ErrorData as McpError, model::*};
2
3use crate::{
4 control_plane::policy::Policy,
5 core::dns::access_lists,
6 core::dns::service::DnsService,
7 mcp::{helpers::run_json, params::DomainParams},
8};
9
10pub async fn handle_list_blocked<C: DnsService + Send + Sync>(
11 client: &C,
12 policy: &Policy,
13) -> Result<CallToolResult, McpError> {
14 Ok(run_json(
15 "dns_list_blocked",
16 policy.check_read(),
17 access_lists::list_blocked(client),
18 )
19 .await)
20}
21
22pub async fn handle_add_blocked<C: DnsService + Send + Sync>(
23 client: &C,
24 policy: &Policy,
25 p: DomainParams,
26) -> Result<CallToolResult, McpError> {
27 Ok(run_json(
28 "dns_add_blocked",
29 policy.check_write(),
30 access_lists::add_blocked(client, &p.domain),
31 )
32 .await)
33}
34
35pub async fn handle_delete_blocked<C: DnsService + Send + Sync>(
36 client: &C,
37 policy: &Policy,
38 p: DomainParams,
39) -> Result<CallToolResult, McpError> {
40 Ok(run_json(
41 "dns_delete_blocked",
42 policy.check_delete(),
43 access_lists::delete_blocked(client, &p.domain),
44 )
45 .await)
46}
47
48pub async fn handle_list_allowed<C: DnsService + Send + Sync>(
49 client: &C,
50 policy: &Policy,
51) -> Result<CallToolResult, McpError> {
52 Ok(run_json(
53 "dns_list_allowed",
54 policy.check_read(),
55 access_lists::list_allowed(client),
56 )
57 .await)
58}
59
60pub async fn handle_add_allowed<C: DnsService + Send + Sync>(
61 client: &C,
62 policy: &Policy,
63 p: DomainParams,
64) -> Result<CallToolResult, McpError> {
65 Ok(run_json(
66 "dns_add_allowed",
67 policy.check_write(),
68 access_lists::add_allowed(client, &p.domain),
69 )
70 .await)
71}
72
73pub async fn handle_delete_allowed<C: DnsService + Send + Sync>(
74 client: &C,
75 policy: &Policy,
76 p: DomainParams,
77) -> Result<CallToolResult, McpError> {
78 Ok(run_json(
79 "dns_delete_allowed",
80 policy.check_delete(),
81 access_lists::delete_allowed(client, &p.domain),
82 )
83 .await)
84}