Skip to content

Commit 0b77465

Browse files
fix: use new API schema
1 parent 9a36533 commit 0b77465

File tree

3 files changed

+54
-93
lines changed

3 files changed

+54
-93
lines changed

examples/memory/kb.go

Lines changed: 6 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -464,18 +464,8 @@ func (k knowledgeBase) CreateEntities(ctx context.Context, ss *mcp.ServerSession
464464
return &res, nil
465465
}
466466

467-
// I think marshalling the entities and pass it as a content should not be necessary, but as for now, it looks like
468-
// the StructuredContent is not being unmarshalled in CallToolResultFor.
469-
entitiesJSON, err := json.Marshal(entities)
470-
if err != nil {
471-
res.IsError = true
472-
res.Content = []mcp.Content{
473-
&mcp.TextContent{Text: err.Error()},
474-
}
475-
return &res, nil
476-
}
477467
res.Content = []mcp.Content{
478-
&mcp.TextContent{Text: string(entitiesJSON)},
468+
&mcp.TextContent{Text: "Entities created successfully"},
479469
}
480470

481471
res.StructuredContent = CreateEntitiesResult{
@@ -497,16 +487,8 @@ func (k knowledgeBase) CreateRelations(ctx context.Context, ss *mcp.ServerSessio
497487
return &res, nil
498488
}
499489

500-
relationsJSON, err := json.Marshal(relations)
501-
if err != nil {
502-
res.IsError = true
503-
res.Content = []mcp.Content{
504-
&mcp.TextContent{Text: err.Error()},
505-
}
506-
return &res, nil
507-
}
508490
res.Content = []mcp.Content{
509-
&mcp.TextContent{Text: string(relationsJSON)},
491+
&mcp.TextContent{Text: "Relations created successfully"},
510492
}
511493

512494
res.StructuredContent = CreateRelationsResult{
@@ -528,16 +510,8 @@ func (k knowledgeBase) AddObservations(ctx context.Context, ss *mcp.ServerSessio
528510
return &res, nil
529511
}
530512

531-
observationsJSON, err := json.Marshal(observations)
532-
if err != nil {
533-
res.IsError = true
534-
res.Content = []mcp.Content{
535-
&mcp.TextContent{Text: err.Error()},
536-
}
537-
return &res, nil
538-
}
539513
res.Content = []mcp.Content{
540-
&mcp.TextContent{Text: string(observationsJSON)},
514+
&mcp.TextContent{Text: "Observations added successfully"},
541515
}
542516

543517
res.StructuredContent = AddObservationsResult{
@@ -616,16 +590,8 @@ func (k knowledgeBase) ReadGraph(ctx context.Context, ss *mcp.ServerSession, par
616590
return &res, nil
617591
}
618592

619-
graphJSON, err := json.Marshal(graph)
620-
if err != nil {
621-
res.IsError = true
622-
res.Content = []mcp.Content{
623-
&mcp.TextContent{Text: err.Error()},
624-
}
625-
return &res, nil
626-
}
627593
res.Content = []mcp.Content{
628-
&mcp.TextContent{Text: string(graphJSON)},
594+
&mcp.TextContent{Text: "Graph read successfully"},
629595
}
630596

631597
res.StructuredContent = graph
@@ -644,16 +610,8 @@ func (k knowledgeBase) SearchNodes(ctx context.Context, ss *mcp.ServerSession, p
644610
return &res, nil
645611
}
646612

647-
graphJSON, err := json.Marshal(graph)
648-
if err != nil {
649-
res.IsError = true
650-
res.Content = []mcp.Content{
651-
&mcp.TextContent{Text: err.Error()},
652-
}
653-
return &res, nil
654-
}
655613
res.Content = []mcp.Content{
656-
&mcp.TextContent{Text: string(graphJSON)},
614+
&mcp.TextContent{Text: "Nodes searched successfully"},
657615
}
658616

659617
res.StructuredContent = graph
@@ -672,16 +630,8 @@ func (k knowledgeBase) OpenNodes(ctx context.Context, ss *mcp.ServerSession, par
672630
return &res, nil
673631
}
674632

675-
graphJSON, err := json.Marshal(graph)
676-
if err != nil {
677-
res.IsError = true
678-
res.Content = []mcp.Content{
679-
&mcp.TextContent{Text: err.Error()},
680-
}
681-
return &res, nil
682-
}
683633
res.Content = []mcp.Content{
684-
&mcp.TextContent{Text: string(graphJSON)},
634+
&mcp.TextContent{Text: "Nodes opened successfully"},
685635
}
686636

687637
res.StructuredContent = graph

examples/memory/kb_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -705,11 +705,11 @@ func TestMCPResponseFormat(t *testing.T) {
705705
t.Errorf("expected StructuredContent.Entities to be populated")
706706
}
707707

708-
// Verify Content contains valid JSON
708+
// Verify Content contains simple success message
709709
if textContent, ok := result.Content[0].(*mcp.TextContent); ok {
710-
var entities []Entity
711-
if err := json.Unmarshal([]byte(textContent.Text), &entities); err != nil {
712-
t.Errorf("Content field should contain valid JSON: %v", err)
710+
expectedMessage := "Entities created successfully"
711+
if textContent.Text != expectedMessage {
712+
t.Errorf("expected Content field to contain '%s', got '%s'", expectedMessage, textContent.Text)
713713
}
714714
} else {
715715
t.Errorf("expected Content[0] to be TextContent")

examples/memory/main.go

Lines changed: 44 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ type KnowledgeGraph struct {
5454

5555
// CreateEntitiesArgs defines the create entities tool parameters.
5656
type CreateEntitiesArgs struct {
57-
Entities []Entity `json:"entities"`
57+
Entities []Entity `json:"entities" mcp:"entities to create"`
5858
}
5959

6060
// CreateEntitiesResult returns newly created entities.
@@ -64,7 +64,7 @@ type CreateEntitiesResult struct {
6464

6565
// CreateRelationsArgs defines the create relations tool parameters.
6666
type CreateRelationsArgs struct {
67-
Relations []Relation `json:"relations"`
67+
Relations []Relation `json:"relations" mcp:"relations to create"`
6868
}
6969

7070
// CreateRelationsResult returns newly created relations.
@@ -74,7 +74,7 @@ type CreateRelationsResult struct {
7474

7575
// AddObservationsArgs defines the add observations tool parameters.
7676
type AddObservationsArgs struct {
77-
Observations []Observation `json:"observations"`
77+
Observations []Observation `json:"observations" mcp:"observations to add"`
7878
}
7979

8080
// AddObservationsResult returns newly added observations.
@@ -84,27 +84,27 @@ type AddObservationsResult struct {
8484

8585
// DeleteEntitiesArgs defines the delete entities tool parameters.
8686
type DeleteEntitiesArgs struct {
87-
EntityNames []string `json:"entityNames"`
87+
EntityNames []string `json:"entityNames" mcp:"entities to delete"`
8888
}
8989

9090
// DeleteObservationsArgs defines the delete observations tool parameters.
9191
type DeleteObservationsArgs struct {
92-
Deletions []Observation `json:"deletions"`
92+
Deletions []Observation `json:"deletions" mcp:"obeservations to delete"`
9393
}
9494

9595
// DeleteRelationsArgs defines the delete relations tool parameters.
9696
type DeleteRelationsArgs struct {
97-
Relations []Relation `json:"relations"`
97+
Relations []Relation `json:"relations" mcp:"relations to delete"`
9898
}
9999

100100
// SearchNodesArgs defines the search nodes tool parameters.
101101
type SearchNodesArgs struct {
102-
Query string `json:"query"`
102+
Query string `json:"query" mcp:"query string"`
103103
}
104104

105105
// OpenNodesArgs defines the open nodes tool parameters.
106106
type OpenNodesArgs struct {
107-
Names []string `json:"names"`
107+
Names []string `json:"names" mcp:"names of nodes to open"`
108108
}
109109

110110
func main() {
@@ -120,31 +120,42 @@ func main() {
120120

121121
// Setup MCP server with knowledge base tools
122122
server := mcp.NewServer("memory", "v0.0.1", nil)
123-
server.AddTools(mcp.NewServerTool("create_entities", "Create multiple new entities in the knowledge graph", kb.CreateEntities, mcp.Input(
124-
mcp.Property("entities", mcp.Description("Entities to create")),
125-
)))
126-
server.AddTools(mcp.NewServerTool("create_relations", "Create multiple new relations between entities", kb.CreateRelations, mcp.Input(
127-
mcp.Property("relations", mcp.Description("Relations to create")),
128-
)))
129-
server.AddTools(mcp.NewServerTool("add_observations", "Add new observations to existing entities", kb.AddObservations, mcp.Input(
130-
mcp.Property("observations", mcp.Description("Observations to add")),
131-
)))
132-
server.AddTools(mcp.NewServerTool("delete_entities", "Remove entities and their relations", kb.DeleteEntities, mcp.Input(
133-
mcp.Property("entityNames", mcp.Description("Names of entities to delete")),
134-
)))
135-
server.AddTools(mcp.NewServerTool("delete_observations", "Remove specific observations from entities", kb.DeleteObservations, mcp.Input(
136-
mcp.Property("deletions", mcp.Description("Observations to delete")),
137-
)))
138-
server.AddTools(mcp.NewServerTool("delete_relations", "Remove specific relations from the graph", kb.DeleteRelations, mcp.Input(
139-
mcp.Property("relations", mcp.Description("Relations to delete")),
140-
)))
141-
server.AddTools(mcp.NewServerTool("read_graph", "Read the entire knowledge graph", kb.ReadGraph))
142-
server.AddTools(mcp.NewServerTool("search_nodes", "Search for nodes based on query", kb.SearchNodes, mcp.Input(
143-
mcp.Property("query", mcp.Description("Query string")),
144-
)))
145-
server.AddTools(mcp.NewServerTool("open_nodes", "Retrieve specific nodes by name", kb.OpenNodes, mcp.Input(
146-
mcp.Property("names", mcp.Description("Names of nodes to open")),
147-
)))
123+
mcp.AddTool(server, &mcp.Tool{
124+
Name: "create_entities",
125+
Description: "Create multiple new entities in the knowledge graph",
126+
}, kb.CreateEntities)
127+
mcp.AddTool(server, &mcp.Tool{
128+
Name: "create_relations",
129+
Description: "Create multiple new relations between entities",
130+
}, kb.CreateRelations)
131+
mcp.AddTool(server, &mcp.Tool{
132+
Name: "add_observations",
133+
Description: "Add new observations to existing entities",
134+
}, kb.AddObservations)
135+
mcp.AddTool(server, &mcp.Tool{
136+
Name: "delete_entities",
137+
Description: "Remove entities and their relations",
138+
}, kb.DeleteEntities)
139+
mcp.AddTool(server, &mcp.Tool{
140+
Name: "delete_observations",
141+
Description: "Remove specific observations from entities",
142+
}, kb.DeleteObservations)
143+
mcp.AddTool(server, &mcp.Tool{
144+
Name: "delete_relations",
145+
Description: "Remove specific relations from the graph",
146+
}, kb.DeleteRelations)
147+
mcp.AddTool(server, &mcp.Tool{
148+
Name: "read_graph",
149+
Description: "Read the entire knowledge graph",
150+
}, kb.ReadGraph)
151+
mcp.AddTool(server, &mcp.Tool{
152+
Name: "search_nodes",
153+
Description: "Search for nodes based on query",
154+
}, kb.SearchNodes)
155+
mcp.AddTool(server, &mcp.Tool{
156+
Name: "open_nodes",
157+
Description: "Retrieve specific nodes by name",
158+
}, kb.OpenNodes)
148159

149160
// Start server with appropriate transport
150161
if *httpAddr != "" {

0 commit comments

Comments
 (0)