mirror of
https://github.com/modelcontextprotocol/servers.git
synced 2026-04-21 21:35:15 +02:00
Improve memory server schema validation (#2726)
- Add explicit property filtering in saveGraph method - Add additionalProperties constraints to input schemas
This commit is contained in:
@@ -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,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user