Skip to content

Commit a22ea4b

Browse files
author
Marek Safarik
committed
Get agent policies tool
Signed-off-by: Marek Safarik <[email protected]>
1 parent ce8b67c commit a22ea4b

File tree

4 files changed

+58
-0
lines changed

4 files changed

+58
-0
lines changed

backend/helpers.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,32 @@ func mapAgentToOutput(agentUUID string, agentStatus keylimeAgentStatusResponse)
6464
HasRuntimePolicy: agentStatus.Results.HasRuntimePolicy != 0,
6565
}
6666
}
67+
68+
func mapAgentToPolicies(agentUUID string, agentStatus keylimeAgentStatusResponse) getAgentPoliciesOutput {
69+
return getAgentPoliciesOutput{
70+
AgentUUID: agentUUID,
71+
TPMPolicy: parseJSONString(agentStatus.Results.TPMPolicy),
72+
VTPMPolicy: parseJSONString(agentStatus.Results.VTPMPolicy),
73+
MetaData: parseJSONString(agentStatus.Results.MetaData),
74+
HasMeasuredBootPolicy: agentStatus.Results.HasMbRefstate != 0,
75+
HasRuntimePolicy: agentStatus.Results.HasRuntimePolicy != 0,
76+
AcceptedTPMHashAlgs: agentStatus.Results.AcceptTPMHashAlgs,
77+
AcceptedTPMEncryptionAlgs: agentStatus.Results.AcceptTPMEncryptionAlgs,
78+
AcceptedTPMSigningAlgs: agentStatus.Results.AcceptTPMSigningAlgs,
79+
}
80+
}
81+
82+
// parseJSONString converts a JSON string into a proper Go interface
83+
func parseJSONString(jsonStr string) interface{} {
84+
if jsonStr == "" {
85+
return map[string]interface{}{}
86+
}
87+
88+
var result interface{}
89+
if err := json.Unmarshal([]byte(jsonStr), &result); err != nil {
90+
log.Printf("Warning: Invalid JSON string: %v", err)
91+
return map[string]interface{}{}
92+
}
93+
94+
return result
95+
}

backend/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ func main() {
5050
mcp.AddTool(server, &mcp.Tool{Name: "Get_agent_status", Description: "Retrieves the current status information for a specific agent identified by its UUID"}, getAgentStatus)
5151
mcp.AddTool(server, &mcp.Tool{Name: "Get_failed_agents", Description: "Retrieves all agents currently in a failed operational state with their detailed status information including attestation history and failure reasons"}, getFailedAgents)
5252
mcp.AddTool(server, &mcp.Tool{Name: "Reactivate_agent", Description: "Reactivates a failed agent identified by its UUID"}, reactivate_agent)
53+
mcp.AddTool(server, &mcp.Tool{Name: "Get_agent_policies", Description: "Retrieves policy configuration (TPM, vTPM, runtime policies) for a specific agent"}, agent_policies)
5354
if err := server.Run(context.Background(), &mcp.StdioTransport{}); err != nil {
5455
log.Fatal(err)
5556
}

backend/tools.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,15 @@ func reactivate_agent(ctx context.Context, req *mcp.CallToolRequest, input react
8282

8383
return nil, response, nil
8484
}
85+
86+
func agent_policies(ctx context.Context, req *mcp.CallToolRequest, input getAgentPoliciesInput) (
87+
*mcp.CallToolResult,
88+
getAgentPoliciesOutput,
89+
error,
90+
) {
91+
agentDetails, err := fetchAgentDetails(input.AgentUUID)
92+
if err != nil {
93+
return nil, getAgentPoliciesOutput{}, err
94+
}
95+
return nil, mapAgentToPolicies(input.AgentUUID, agentDetails), nil
96+
}

backend/types.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,3 +144,19 @@ type reactivateAgentOutput struct {
144144
Status string `json:"status"`
145145
Results struct{} `json:"results"`
146146
}
147+
148+
type getAgentPoliciesInput struct {
149+
AgentUUID string `json:"agent_uuid"`
150+
}
151+
152+
type getAgentPoliciesOutput struct {
153+
AgentUUID string `json:"agent_uuid"`
154+
TPMPolicy interface{} `json:"tpm_policy"`
155+
VTPMPolicy interface{} `json:"vtpm_policy"`
156+
MetaData interface{} `json:"meta_data"`
157+
HasMeasuredBootPolicy bool `json:"has_measured_boot_policy"`
158+
HasRuntimePolicy bool `json:"has_runtime_policy"`
159+
AcceptedTPMHashAlgs []string `json:"accepted_tpm_hash_algs"`
160+
AcceptedTPMEncryptionAlgs []string `json:"accepted_tpm_encryption_algs"`
161+
AcceptedTPMSigningAlgs []string `json:"accepted_tpm_signing_algs"`
162+
}

0 commit comments

Comments
 (0)