Graph Delete
graph_deletePermanently delete an entity node and all its edges by ID to remove duplicate or erroneous nodes. This action is irreversible.
Instructions
Permanently delete an entity node and all its edges by ID. Use for removing duplicate or erroneous nodes. Cannot be undone.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Entity ID to delete |
Implementation Reference
- src/mcp-server/index.ts:316-334 (registration)Registration of the 'graph_delete' tool via server.registerTool() with input schema and handler.
server.registerTool("graph_delete", { title: "Graph Delete", description: "Permanently delete an entity node and all its edges by ID. Use for removing duplicate or erroneous nodes. Cannot be undone.", inputSchema: { id: z.string().describe("Entity ID to delete"), }, annotations: { destructiveHint: true }, }, async (args) => { try { const deleted = await client.deleteEntity(currentTenant(), args.id); if (!deleted) { return toolError(`No entity found with id: ${args.id}`); } return toolResult({ action: "deleted", id: args.id }); } catch (err) { return toolError(`graph_delete failed: ${err instanceof Error ? err.message : String(err)}`); } }); - src/mcp-server/index.ts:320-322 (schema)Input schema for graph_delete: accepts a single required 'id' string parameter.
inputSchema: { id: z.string().describe("Entity ID to delete"), }, - src/mcp-server/index.ts:324-334 (handler)Handler function for graph_delete: calls client.deleteEntity() with tenant context and the entity ID, returns success or error.
}, async (args) => { try { const deleted = await client.deleteEntity(currentTenant(), args.id); if (!deleted) { return toolError(`No entity found with id: ${args.id}`); } return toolResult({ action: "deleted", id: args.id }); } catch (err) { return toolError(`graph_delete failed: ${err instanceof Error ? err.message : String(err)}`); } }); - src/shared/neo4j-client.ts:418-424 (helper)The Neo4jClient.deleteEntity method that executes the Cypher query to DETACH DELETE the entity by tenant_id and id. Returns boolean indicating if any node was deleted.
async deleteEntity(tenantId: string, id: string): Promise<boolean> { const rows = await this.run( `MATCH (n:Entity {tenant_id: $tenantId, id: $id}) DETACH DELETE n RETURN count(n) AS deleted`, { tenantId, id }, ); return Number(rows[0]?.["deleted"] ?? 0) > 0; }