Skip to content

Commit bacb6a3

Browse files
msafarikMarek Safarik
andauthored
MCP-Client (#10)
* Simple initial MCP client implementation Signed-off-by: Marek Safarik <[email protected]> * AI formatted response from Keylime Signed-off-by: Marek Safarik <[email protected]> * Agentic loop + refactored code Signed-off-by: Marek Safarik <[email protected]> * Copilot pull request review fix Signed-off-by: Marek Safarik <[email protected]> * copilot review Signed-off-by: Marek Safarik <[email protected]> * Fix after sergio review Signed-off-by: Marek Safarik <[email protected]> --------- Signed-off-by: Marek Safarik <[email protected]> Co-authored-by: Marek Safarik <[email protected]>
1 parent bf81763 commit bacb6a3

File tree

7 files changed

+417
-4
lines changed

7 files changed

+417
-4
lines changed

backend/helpers.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ func fetchAllAgentUUIDs() ([]string, error) {
2222
return nil, err
2323
}
2424

25+
if agents.Results.UUIDs == nil {
26+
return []string{}, nil
27+
}
28+
2529
return agents.Results.UUIDs, nil
2630
}
2731

@@ -66,16 +70,30 @@ func mapAgentToOutput(agentUUID string, agentStatus keylimeAgentStatusResponse)
6670
}
6771

6872
func mapAgentToPolicies(agentUUID string, agentStatus keylimeAgentStatusResponse) getAgentPoliciesOutput {
73+
// Ensure slices are never nil
74+
hashAlgs := agentStatus.Results.AcceptTPMHashAlgs
75+
if hashAlgs == nil {
76+
hashAlgs = []string{}
77+
}
78+
encAlgs := agentStatus.Results.AcceptTPMEncryptionAlgs
79+
if encAlgs == nil {
80+
encAlgs = []string{}
81+
}
82+
signAlgs := agentStatus.Results.AcceptTPMSigningAlgs
83+
if signAlgs == nil {
84+
signAlgs = []string{}
85+
}
86+
6987
return getAgentPoliciesOutput{
7088
AgentUUID: agentUUID,
7189
TPMPolicy: parseJSONString(agentStatus.Results.TPMPolicy),
7290
VTPMPolicy: parseJSONString(agentStatus.Results.VTPMPolicy),
7391
MetaData: parseJSONString(agentStatus.Results.MetaData),
7492
HasMeasuredBootPolicy: agentStatus.Results.HasMbRefstate != 0,
7593
HasRuntimePolicy: agentStatus.Results.HasRuntimePolicy != 0,
76-
AcceptedTPMHashAlgs: agentStatus.Results.AcceptTPMHashAlgs,
77-
AcceptedTPMEncryptionAlgs: agentStatus.Results.AcceptTPMEncryptionAlgs,
78-
AcceptedTPMSigningAlgs: agentStatus.Results.AcceptTPMSigningAlgs,
94+
AcceptedTPMHashAlgs: hashAlgs,
95+
AcceptedTPMEncryptionAlgs: encAlgs,
96+
AcceptedTPMSigningAlgs: signAlgs,
7997
}
8098
}
8199

backend/tools.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ func getFailedAgents(ctx context.Context, req *mcp.CallToolRequest, input getFai
4545
return nil, getFailedAgentsOutput{}, err
4646
}
4747

48-
var failedAgents getFailedAgentsOutput
48+
failedAgents := getFailedAgentsOutput{
49+
FailedAgents: []getAgentStatusOutput{},
50+
}
4951
for _, agentUUID := range uuids {
5052
agentStatus, err := fetchAgentDetails(agentUUID)
5153
if err != nil {

mcp-client/go.mod

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module github.com/keylime/keylime-mcp/mcp-client
2+
3+
go 1.23.0
4+
5+
require (
6+
github.com/anthropics/anthropic-sdk-go v1.18.0
7+
github.com/joho/godotenv v1.5.1
8+
github.com/modelcontextprotocol/go-sdk v1.1.0
9+
)
10+
11+
require (
12+
github.com/google/jsonschema-go v0.3.0 // indirect
13+
github.com/tidwall/gjson v1.18.0 // indirect
14+
github.com/tidwall/match v1.1.1 // indirect
15+
github.com/tidwall/pretty v1.2.1 // indirect
16+
github.com/tidwall/sjson v1.2.5 // indirect
17+
github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
18+
golang.org/x/oauth2 v0.30.0 // indirect
19+
)

mcp-client/go.sum

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
github.com/anthropics/anthropic-sdk-go v1.18.0 h1:jfxRA7AqZoCm83nHO/OVQp8xuwjUKtBziEdMbfmofHU=
2+
github.com/anthropics/anthropic-sdk-go v1.18.0/go.mod h1:WTz31rIUHUHqai2UslPpw5CwXrQP3geYBioRV4WOLvE=
3+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
4+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
6+
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
7+
github.com/google/jsonschema-go v0.3.0 h1:6AH2TxVNtk3IlvkkhjrtbUc4S8AvO0Xii0DxIygDg+Q=
8+
github.com/google/jsonschema-go v0.3.0/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE=
9+
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
10+
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
11+
github.com/modelcontextprotocol/go-sdk v1.1.0 h1:Qjayg53dnKC4UZ+792W21e4BpwEZBzwgRW6LrjLWSwA=
12+
github.com/modelcontextprotocol/go-sdk v1.1.0/go.mod h1:6fM3LCm3yV7pAs8isnKLn07oKtB0MP9LHd3DfAcKw10=
13+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
14+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
15+
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
16+
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
17+
github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
18+
github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY=
19+
github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
20+
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
21+
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
22+
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
23+
github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
24+
github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
25+
github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
26+
github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
27+
github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4=
28+
github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4=
29+
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
30+
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
31+
golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo=
32+
golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg=
33+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
34+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

mcp-client/main

12.8 MB
Binary file not shown.

0 commit comments

Comments
 (0)