From 41965f1acfb9f2397a3a63ed879a7b280ca7e4e6 Mon Sep 17 00:00:00 2001 From: Brian O'Kelley Date: Wed, 1 Apr 2026 22:12:33 +0900 Subject: [PATCH] fix: list_paying_members returns all active members The tool's default limit of 50 (max 100) was silently truncating results, causing Addie to report 58 members when there are ~132 active. Raise default to 200 (max 500) and add a truncation warning so the agent knows when results are incomplete. Co-Authored-By: Claude Opus 4.6 (1M context) --- .changeset/slimy-paths-beam.md | 2 +- server/src/addie/mcp/admin-tools.ts | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.changeset/slimy-paths-beam.md b/.changeset/slimy-paths-beam.md index 46eca22c64..60359e4c70 100644 --- a/.changeset/slimy-paths-beam.md +++ b/.changeset/slimy-paths-beam.md @@ -1,4 +1,4 @@ --- --- -Add list_paying_members admin tool and infer membership tier from subscription amount in get_account. +Fix list_paying_members returning incomplete results: raise default limit from 50 to 200 (max 500), add truncation warning when results are capped. diff --git a/server/src/addie/mcp/admin-tools.ts b/server/src/addie/mcp/admin-tools.ts index e3f664e00b..01bf5f54ac 100644 --- a/server/src/addie/mcp/admin-tools.ts +++ b/server/src/addie/mcp/admin-tools.ts @@ -1093,7 +1093,7 @@ Roles: member (default), admin (can manage team), owner (full control)`, }, limit: { type: 'number', - description: 'Maximum results (default: 50)', + description: 'Maximum results (default: 200, max: 500)', }, }, }, @@ -6610,7 +6610,7 @@ Use add_committee_leader to assign a leader.`; try { const pool = getPool(); const includeIndividual = input.include_individual !== false; - const limit = Math.min(Math.max((input.limit as number) || 50, 1), 100); + const limit = Math.min(Math.max((input.limit as number) || 200, 1), 500); const result = await pool.query( `SELECT @@ -6694,6 +6694,7 @@ Use add_committee_leader to assign a leader.`; let response = `## Active Members\n\n`; response += `**${result.rows.length} active member${result.rows.length !== 1 ? 's' : ''}**`; if (!includeIndividual) response += ` (corporate only)`; + if (result.rows.length >= limit) response += ` (results truncated at ${limit} — increase limit for full list)`; response += `\n\n`; if (groups.icl.length > 0) {