Improve memory server schema validation (#2726)

- Add explicit property filtering in saveGraph method
- Add additionalProperties constraints to input schemas
This commit is contained in:
Aonan Guan
2025-09-18 07:11:12 -07:00
committed by GitHub
parent 1bd3734e72
commit 52ab84cd63

View File

@@ -60,8 +60,18 @@ class KnowledgeGraphManager {
private async saveGraph(graph: KnowledgeGraph): Promise<void> { private async saveGraph(graph: KnowledgeGraph): Promise<void> {
const lines = [ const lines = [
...graph.entities.map(e => JSON.stringify({ type: "entity", ...e })), ...graph.entities.map(e => JSON.stringify({
...graph.relations.map(r => JSON.stringify({ type: "relation", ...r })), type: "entity",
name: e.name,
entityType: e.entityType,
observations: e.observations
})),
...graph.relations.map(r => JSON.stringify({
type: "relation",
from: r.from,
to: r.to,
relationType: r.relationType
})),
]; ];
await fs.writeFile(MEMORY_FILE_PATH, lines.join("\n")); await fs.writeFile(MEMORY_FILE_PATH, lines.join("\n"));
} }
@@ -219,10 +229,12 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
}, },
}, },
required: ["name", "entityType", "observations"], required: ["name", "entityType", "observations"],
additionalProperties: false,
}, },
}, },
}, },
required: ["entities"], required: ["entities"],
additionalProperties: false,
}, },
}, },
{ {
@@ -241,10 +253,12 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
relationType: { type: "string", description: "The type of the relation" }, relationType: { type: "string", description: "The type of the relation" },
}, },
required: ["from", "to", "relationType"], required: ["from", "to", "relationType"],
additionalProperties: false,
}, },
}, },
}, },
required: ["relations"], required: ["relations"],
additionalProperties: false,
}, },
}, },
{ {
@@ -266,10 +280,12 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
}, },
}, },
required: ["entityName", "contents"], required: ["entityName", "contents"],
additionalProperties: false,
}, },
}, },
}, },
required: ["observations"], required: ["observations"],
additionalProperties: false,
}, },
}, },
{ {
@@ -285,6 +301,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
}, },
}, },
required: ["entityNames"], required: ["entityNames"],
additionalProperties: false,
}, },
}, },
{ {
@@ -306,10 +323,12 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
}, },
}, },
required: ["entityName", "observations"], required: ["entityName", "observations"],
additionalProperties: false,
}, },
}, },
}, },
required: ["deletions"], required: ["deletions"],
additionalProperties: false,
}, },
}, },
{ {
@@ -328,11 +347,13 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
relationType: { type: "string", description: "The type of the relation" }, relationType: { type: "string", description: "The type of the relation" },
}, },
required: ["from", "to", "relationType"], required: ["from", "to", "relationType"],
additionalProperties: false,
}, },
description: "An array of relations to delete" description: "An array of relations to delete"
}, },
}, },
required: ["relations"], required: ["relations"],
additionalProperties: false,
}, },
}, },
{ {
@@ -341,6 +362,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
inputSchema: { inputSchema: {
type: "object", type: "object",
properties: {}, properties: {},
additionalProperties: false,
}, },
}, },
{ {
@@ -352,6 +374,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
query: { type: "string", description: "The search query to match against entity names, types, and observation content" }, query: { type: "string", description: "The search query to match against entity names, types, and observation content" },
}, },
required: ["query"], required: ["query"],
additionalProperties: false,
}, },
}, },
{ {
@@ -367,6 +390,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
}, },
}, },
required: ["names"], required: ["names"],
additionalProperties: false,
}, },
}, },
], ],