create_relations
Define connections between knowledge graph entities using active voice relations to build structured networks in Obsidian.
Instructions
Create multiple new relations between entities in the knowledge graph. Relations should be in active voice
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| relations | Yes |
Implementation Reference
- Core implementation of the createRelations tool: loads graph, checks for duplicates, updates source entity markdown files with new relations using addRelationToContent, and returns created relations.async createRelations(relations: Relation[]): Promise<Relation[]> { const graph = await this.loadGraph(); const newRelations: Relation[] = []; for (const relation of relations) { // Check if relation already exists const exists = graph.relations.some(r => r.from === relation.from && r.to === relation.to && r.relationType === relation.relationType ); if (exists) continue; // Update the source entity file const fromPath = getEntityPath(relation.from); try { const content = await fs.readFile(fromPath, 'utf-8'); const updatedContent = addRelationToContent(content, relation); await fs.writeFile(fromPath, updatedContent, 'utf-8'); newRelations.push(relation); } catch (error) { if (error instanceof Error && 'code' in error && (error as any).code === 'ENOENT') { throw new Error(`Entity ${relation.from} not found`); } throw error; } } return newRelations; }
- index.ts:55-76 (registration)Tool registration in ListToolsRequestSchema handler: defines name, description, and input schema for create_relations tool.{ name: "create_relations", description: "Create multiple new relations between entities in the knowledge graph. Relations should be in active voice", inputSchema: { type: "object", properties: { relations: { type: "array", items: { type: "object", properties: { from: { type: "string", description: "The name of the entity where the relation starts" }, to: { type: "string", description: "The name of the entity where the relation ends" }, relationType: { type: "string", description: "The type of the relation" }, }, required: ["from", "to", "relationType"], }, }, }, required: ["relations"], }, },
- index.ts:213-214 (handler)MCP CallToolRequestSchema dispatch case: handles tool invocation by calling storageManager.createRelations and formatting response.case "create_relations": return { content: [{ type: "text", text: JSON.stringify(await storageManager.createRelations(args.relations as Relation[]), null, 2) }] };
- index.ts:58-75 (schema)Input schema definition for validating arguments to the create_relations tool.inputSchema: { type: "object", properties: { relations: { type: "array", items: { type: "object", properties: { from: { type: "string", description: "The name of the entity where the relation starts" }, to: { type: "string", description: "The name of the entity where the relation ends" }, relationType: { type: "string", description: "The type of the relation" }, }, required: ["from", "to", "relationType"], }, }, }, required: ["relations"], },