diff --git a/packages/agentctx/src/mcp/tools.ts b/packages/agentctx/src/mcp/tools.ts index 7f2f3c8..ee13d6d 100644 --- a/packages/agentctx/src/mcp/tools.ts +++ b/packages/agentctx/src/mcp/tools.ts @@ -354,7 +354,9 @@ export function toolDefinitions(): ToolDefinition[] { ids: { type: "array", items: { type: "string" }, - description: `Record ids from ctx_search/ctx_related (max ${GET_IDS_MAX})`, + minItems: 1, + maxItems: GET_IDS_MAX, + description: `Record ids from ctx_search/ctx_related (at least 1, max ${GET_IDS_MAX})`, }, }, required: ["ids"], diff --git a/packages/agentctx/test/mcp/tools.test.ts b/packages/agentctx/test/mcp/tools.test.ts index e399850..1cd5e9f 100644 --- a/packages/agentctx/test/mcp/tools.test.ts +++ b/packages/agentctx/test/mcp/tools.test.ts @@ -207,6 +207,14 @@ describe("ctx_search", () => { }); describe("ctx_get", () => { + it("declares minItems/maxItems bounds on the ids schema", () => { + const schema = tools.find((tool) => tool.name === "ctx_get"); + const ids = (schema?.inputSchema as { properties: { ids: Record } }) + .properties.ids; + expect(ids.minItems).toBe(1); + expect(ids.maxItems).toBe(GET_IDS_MAX); + }); + it("advertises the same id cap as GET_IDS_MAX", () => { const schema = tools.find((tool) => tool.name === "ctx_get"); expect(schema?.description).toContain(`at most ${String(GET_IDS_MAX)} per call`);