openNodes returns entities with specified names and their interconnecting relations.
(names []string)
| 392 | |
| 393 | // openNodes returns entities with specified names and their interconnecting relations. |
| 394 | func (k knowledgeBase) openNodes(names []string) (KnowledgeGraph, error) { |
| 395 | graph, err := k.loadGraph() |
| 396 | if err != nil { |
| 397 | return KnowledgeGraph{}, err |
| 398 | } |
| 399 | |
| 400 | // Create map for quick name lookup |
| 401 | nameSet := make(map[string]bool) |
| 402 | for _, name := range names { |
| 403 | nameSet[name] = true |
| 404 | } |
| 405 | |
| 406 | // Filter entities |
| 407 | var filteredEntities []Entity |
| 408 | for _, entity := range graph.Entities { |
| 409 | if nameSet[entity.Name] { |
| 410 | filteredEntities = append(filteredEntities, entity) |
| 411 | } |
| 412 | } |
| 413 | |
| 414 | // Create map for quick entity lookup |
| 415 | filteredEntityNames := make(map[string]bool) |
| 416 | for _, entity := range filteredEntities { |
| 417 | filteredEntityNames[entity.Name] = true |
| 418 | } |
| 419 | |
| 420 | // Filter relations |
| 421 | var filteredRelations []Relation |
| 422 | for _, relation := range graph.Relations { |
| 423 | if filteredEntityNames[relation.From] && filteredEntityNames[relation.To] { |
| 424 | filteredRelations = append(filteredRelations, relation) |
| 425 | } |
| 426 | } |
| 427 | |
| 428 | return KnowledgeGraph{ |
| 429 | Entities: filteredEntities, |
| 430 | Relations: filteredRelations, |
| 431 | }, nil |
| 432 | } |
| 433 | |
| 434 | func (k knowledgeBase) CreateEntities(ctx context.Context, req *mcp.CallToolRequest, args CreateEntitiesArgs) (*mcp.CallToolResult, CreateEntitiesResult, error) { |
| 435 | var res mcp.CallToolResult |