Intent: an admin's agent sees who is on the forge and in what state before it acts on one. This pairs with #4794 (account_suspend) and the existing account_role.
Done:
[ ] src/http/mcp.ts has an accounts tool, placed right after model_grant, taking an optional cursor and limit. It answers what GET /api/v1/admin/accounts answers for the same caller (person admins only): username, role, verified, suspended, created
[ ] it is listed only to admins, and never shows an email to anyone the API would not show it to
[ ] docs/MCP.md has its row beside model_grant
[ ] test/mcp-accounts.test.ts: an admin lists three accounts and sees a suspended one marked; limit pages; a non-admin is refused and not listed the tool
Risks: test/mcp-size.test.ts holds tools/list under a 37,000-byte headroom, so keep the description to one short sentence. Other MCP tools are being added in parallel, so put this one exactly where named so the hunks do not meet. Do not change the API routes: the tool calls the same functions.
Intent: an admin's agent sees who is on the forge and in what state before it acts on one. This pairs with #4794 (
account_suspend) and the existingaccount_role.Done:
accountstool, placed right aftermodel_grant, taking an optionalcursorandlimit. It answers what GET/api/v1/admin/accountsanswers for the same caller (person admins only): username, role, verified, suspended, createdmodel_grantlimitpages; a non-admin is refused and not listed the toolRisks:
test/mcp-size.test.tsholdstools/listunder a 37,000-byte headroom, so keep the description to one short sentence. Other MCP tools are being added in parallel, so put this one exactly where named so the hunks do not meet. Do not change the API routes: the tool calls the same functions.