@@ -2,9 +2,6 @@ package main
22
33import (
44 "context"
5- "encoding/json"
6- "fmt"
7- "log"
85
96 "github.com/modelcontextprotocol/go-sdk/mcp"
107)
@@ -14,113 +11,46 @@ func getAllAgents(ctx context.Context, req *mcp.CallToolRequest, _ getAllAgentsI
1411 getAllAgentsOutput ,
1512 error ,
1613) {
17- resp , err := keylimeRegistrarClient . Get ( "agents" )
14+ uuids , err := fetchAllAgentUUIDs ( )
1815 if err != nil {
19- log .Printf ("Error fetching agents: %v" , err )
2016 return nil , getAllAgentsOutput {}, err
2117 }
22- defer resp .Body .Close ()
2318
24- var agents keylimeAgentListResponse
25- err = json .NewDecoder (resp .Body ).Decode (& agents )
26- if err != nil {
27- log .Printf ("Error decoding agents: %v" , err )
28- return nil , getAllAgentsOutput {}, err
29- }
30-
31- return nil , getAllAgentsOutput {Agents : agents .Results .UUIDs }, nil
19+ return nil , getAllAgentsOutput {Agents : uuids }, nil
3220}
3321
3422func getAgentStatus (ctx context.Context , req * mcp.CallToolRequest , input getAgentStatusInput ) (
3523 * mcp.CallToolResult ,
3624 getAgentStatusOutput ,
3725 error ,
3826) {
39- resp , err := keylimeVerifierClient . Get ( fmt . Sprintf ( "agents/%s" , input .AgentUUID ) )
27+ agentStatus , err := fetchAgentDetails ( input .AgentUUID )
4028 if err != nil {
41- log .Printf ("Error fetching agent status: %v" , err )
4229 return nil , getAgentStatusOutput {}, err
4330 }
44- defer resp .Body .Close ()
4531
46- var agentStatus keylimeAgentStatusResponse
47- err = json .NewDecoder (resp .Body ).Decode (& agentStatus )
48- if err != nil {
49- log .Printf ("Error decoding agent status: %v" , err )
50- return nil , getAgentStatusOutput {}, err
51- }
52-
53- return nil , getAgentStatusOutput {
54- AgentUUID : input .AgentUUID ,
55- OperationalState : agentStatus .Results .OperationalState ,
56- OperationalStateDescription : stateToString (agentStatus .Results .OperationalState ),
57- IP : agentStatus .Results .IP ,
58- Port : agentStatus .Results .Port ,
59- AttestationCount : agentStatus .Results .AttestationCount ,
60- LastReceivedQuote : agentStatus .Results .LastReceivedQuote ,
61- LastSuccessfulAttestation : agentStatus .Results .LastSuccessfulAttestation ,
62- SeverityLevel : agentStatus .Results .SeverityLevel ,
63- LastEventID : agentStatus .Results .LastEventID ,
64- }, nil
32+ return nil , mapAgentToOutput (input .AgentUUID , agentStatus ), nil
6533}
6634
6735func getFailedAgents (ctx context.Context , req * mcp.CallToolRequest , input getFailedAgentsInput ) (
6836 * mcp.CallToolResult ,
6937 getFailedAgentsOutput ,
7038 error ,
7139) {
72- resp , err := keylimeRegistrarClient . Get ( "agents" )
40+ uuids , err := fetchAllAgentUUIDs ( )
7341 if err != nil {
74- log .Printf ("Error fetching agents: %v" , err )
75- return nil , getFailedAgentsOutput {}, err
76- }
77- defer resp .Body .Close ()
78-
79- var agents keylimeAgentListResponse
80- err = json .NewDecoder (resp .Body ).Decode (& agents )
81- if err != nil {
82- log .Printf ("Error decoding agents: %v" , err )
8342 return nil , getFailedAgentsOutput {}, err
8443 }
8544
8645 var failedAgents getFailedAgentsOutput
87- for _ , agentUUID := range agents .Results .UUIDs {
88- agentResp , err := keylimeVerifierClient .Get (fmt .Sprintf ("agents/%s" , agentUUID ))
89- if err != nil {
90- log .Printf ("Error fetching agent status: %v" , err )
91- return nil , getFailedAgentsOutput {}, err
92- }
93-
94- var agentStatus keylimeAgentStatusResponse
95- err = json .NewDecoder (agentResp .Body ).Decode (& agentStatus )
96- agentResp .Body .Close () // Close immediately after use
97-
46+ for _ , agentUUID := range uuids {
47+ agentStatus , err := fetchAgentDetails (agentUUID )
9848 if err != nil {
99- log .Printf ("Error decoding agent status: %v" , err )
10049 return nil , getFailedAgentsOutput {}, err
10150 }
10251
103- // Check if agent is in failed state
10452 if agentStatus .Results .OperationalState == StateFailed {
105- failedAgents .FailedAgents = append (failedAgents .FailedAgents , getAgentStatusOutput {
106- AgentUUID : agentUUID ,
107- OperationalState : agentStatus .Results .OperationalState ,
108- OperationalStateDescription : stateToString (agentStatus .Results .OperationalState ),
109- IP : agentStatus .Results .IP ,
110- Port : agentStatus .Results .Port ,
111- AttestationCount : agentStatus .Results .AttestationCount ,
112- LastReceivedQuote : agentStatus .Results .LastReceivedQuote ,
113- LastSuccessfulAttestation : agentStatus .Results .LastSuccessfulAttestation ,
114- SeverityLevel : agentStatus .Results .SeverityLevel ,
115- LastEventID : agentStatus .Results .LastEventID ,
116- HashAlgorithm : agentStatus .Results .HashAlg ,
117- EncryptionAlgorithm : agentStatus .Results .EncAlg ,
118- SigningAlgorithm : agentStatus .Results .SignAlg ,
119- VerifierID : agentStatus .Results .VerifierID ,
120- VerifierAddress : fmt .Sprintf ("%s:%d" , agentStatus .Results .VerifierIP , agentStatus .Results .VerifierPort ),
121- HasMeasuredBoot : agentStatus .Results .HasMbRefstate != 0 ,
122- HasRuntimePolicy : agentStatus .Results .HasRuntimePolicy != 0 ,
123- })
53+ failedAgents .FailedAgents = append (failedAgents .FailedAgents , mapAgentToOutput (agentUUID , agentStatus ))
12454 }
12555 }
12656
0 commit comments