Skip to content

Commit dd37c64

Browse files
committed
Add limit param for list items
1 parent abeec1c commit dd37c64

File tree

3 files changed

+32
-11
lines changed

3 files changed

+32
-11
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/tools/list-items.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,14 @@ export function registerListItemsTool(server: McpServer) {
3939
.optional()
4040
.default(1)
4141
.describe("Page number for pagination (default: 1)"),
42+
limit: z
43+
.number()
44+
.int()
45+
.min(1)
46+
.max(5000)
47+
.optional()
48+
.default(20)
49+
.describe("Number of items per page (default: 20, max: 5000)"),
4250
query: z
4351
.string()
4452
.optional()
@@ -49,12 +57,14 @@ export function registerListItemsTool(server: McpServer) {
4957
level,
5058
environment,
5159
page,
60+
limit,
5261
query,
5362
}: {
5463
status?: string;
5564
level?: string[];
5665
environment?: string;
5766
page?: number;
67+
limit?: number;
5868
query?: string;
5969
}) => {
6070
// Build query parameters
@@ -76,6 +86,10 @@ export function registerListItemsTool(server: McpServer) {
7686
params.append("page", page.toString());
7787
}
7888

89+
if (limit) {
90+
params.append("limit", limit.toString());
91+
}
92+
7993
if (query) {
8094
params.append("q", query);
8195
}

tests/unit/tools/list-items.test.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ describe('list-items tool', () => {
2121
console.error = vi.fn();
2222
const { makeRollbarRequest } = await import('../../../src/utils/api.js');
2323
makeRollbarRequestMock = makeRollbarRequest as any;
24-
24+
2525
server = {
2626
tool: vi.fn((name, description, schema, handler) => {
2727
toolHandler = handler;
2828
})
2929
} as any;
30-
30+
3131
registerListItemsTool(server);
3232
});
3333

@@ -59,7 +59,7 @@ describe('list-items tool', () => {
5959
'https://api.rollbar.com/api/1/items/?status=active&environment=production',
6060
'list-items'
6161
);
62-
62+
6363
const responseData = JSON.parse(result.content[0].text);
6464
expect(responseData.items).toHaveLength(1);
6565
expect(responseData.pagination).toEqual({
@@ -90,7 +90,7 @@ describe('list-items tool', () => {
9090
'https://api.rollbar.com/api/1/items/?status=resolved&level=error&level=critical&environment=staging&page=2&q=TypeError',
9191
'list-items'
9292
);
93-
93+
9494
const responseData = JSON.parse(result.content[0].text);
9595
expect(responseData.filters_applied).toEqual({
9696
status: 'resolved',
@@ -139,26 +139,33 @@ describe('list-items tool', () => {
139139
it('should validate parameter schemas with Zod', () => {
140140
const schemaCall = (server.tool as any).mock.calls[0];
141141
const schema = schemaCall[2];
142-
142+
143143
// Test status parameter
144144
expect(schema.status.parse(undefined)).toBe('active'); // default
145145
expect(schema.status.parse('resolved')).toBe('resolved');
146-
146+
147147
// Test level parameter
148148
expect(schema.level.parse(undefined)).toBeUndefined(); // optional
149149
expect(schema.level.parse(['error', 'warning'])).toEqual(['error', 'warning']);
150150
expect(() => schema.level.parse('error')).toThrow(); // must be array
151-
151+
152152
// Test environment parameter
153153
expect(schema.environment.parse(undefined)).toBe('production'); // default
154154
expect(schema.environment.parse('staging')).toBe('staging');
155-
155+
156156
// Test page parameter
157157
expect(schema.page.parse(undefined)).toBe(1); // default
158158
expect(schema.page.parse(5)).toBe(5);
159159
expect(() => schema.page.parse(0)).toThrow(); // min is 1
160160
expect(() => schema.page.parse(3.14)).toThrow(); // must be int
161-
161+
162+
// Test limit parameter
163+
expect(schema.limit.parse(undefined)).toBe(20); // default
164+
expect(schema.limit.parse(50)).toBe(50);
165+
expect(() => schema.limit.parse(0)).toThrow(); // min is 1
166+
expect(() => schema.limit.parse(5001)).toThrow(); // max is 5000
167+
expect(() => schema.limit.parse(2.5)).toThrow(); // must be int
168+
162169
// Test query parameter
163170
expect(schema.query.parse(undefined)).toBeUndefined(); // optional
164171
expect(schema.query.parse('search term')).toBe('search term');

0 commit comments

Comments
 (0)