Skip to content

Commit 4cbcd89

Browse files
roggenkemperclaude
andcommitted
feat(search-issues): Support recommended sort
Add `recommended` (Sentry's prioritized ranking) to the search_issues tool sort enum, the embedded search-issues agent, and the listIssues API client. The issues API already accepts sort=recommended; the tools just didn't offer it, so an agent could not ask for Sentry's default prioritized ranking. Regenerated toolDefinitions.json is hand-synced to the schema change; CI generate-definitions will confirm. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 3a446cd commit 4cbcd89

8 files changed

Lines changed: 18 additions & 19 deletions

File tree

packages/mcp-core/src/api-client/client.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3008,7 +3008,7 @@ export class SentryApiService {
30083008
* @param params.organizationSlug Organization identifier
30093009
* @param params.projectSlug Project identifier (optional, scopes to specific project)
30103010
* @param params.query Sentry search query (e.g., "is:unresolved browser:chrome")
3011-
* @param params.sortBy Sort order ("user", "freq", "date", "new")
3011+
* @param params.sortBy Sort order ("user", "freq", "date", "new", "recommended")
30123012
* @param opts Request options
30133013
* @returns Array of issues with metadata and statistics
30143014
*
@@ -3042,7 +3042,7 @@ export class SentryApiService {
30423042
organizationSlug: string;
30433043
projectId?: string;
30443044
query?: string | null;
3045-
sortBy?: "user" | "freq" | "date" | "new";
3045+
sortBy?: "user" | "freq" | "date" | "new" | "recommended";
30463046
limit?: number;
30473047
/**
30483048
* Controls the search time window - which issues are included in results.

packages/mcp-core/src/internal/agents/openai-provider.integration.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ describe("OpenAI Provider Integration", () => {
9595
// sort can be null or one of the valid values
9696
expect(
9797
result.sort === null ||
98-
["date", "freq", "new", "user"].includes(result.sort),
98+
["date", "freq", "new", "user", "recommended"].includes(result.sort),
9999
).toBe(true);
100100
},
101101
);
@@ -121,7 +121,7 @@ describe("OpenAI Provider Integration", () => {
121121
// sort being null is valid and tests the nullable field handling
122122
expect(
123123
result.sort === null ||
124-
["date", "freq", "new", "user"].includes(result.sort),
124+
["date", "freq", "new", "user", "recommended"].includes(result.sort),
125125
).toBe(true);
126126
},
127127
);

packages/mcp-core/src/toolDefinitions.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2830,9 +2830,9 @@
28302830
},
28312831
"sort": {
28322832
"default": "date",
2833-
"description": "Sort order: date (last seen), freq (frequency), new (first seen), user (user count)",
2833+
"description": "Sort order: date (last seen), freq (frequency), new (first seen), user (user count), recommended (Sentry's prioritized ranking)",
28342834
"type": "string",
2835-
"enum": ["date", "freq", "new", "user"]
2835+
"enum": ["date", "freq", "new", "user", "recommended"]
28362836
},
28372837
"projectSlugOrId": {
28382838
"default": null,

packages/mcp-core/src/tools/catalog/search-issues.test.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ describe("search_issues", () => {
3939
// Helper to create AI agent response
4040
const mockAIResponse = (
4141
query = "",
42-
sort: "date" | "freq" | "new" | "user" | null = "date",
42+
sort: "date" | "freq" | "new" | "user" | "recommended" | null = "date",
4343
errorMessage?: string,
4444
) => {
4545
const output = errorMessage
@@ -589,12 +589,9 @@ describe("search_issues", () => {
589589
});
590590

591591
it("should handle all sort options", async () => {
592-
const sortOptions: Array<"date" | "freq" | "new" | "user"> = [
593-
"date",
594-
"freq",
595-
"new",
596-
"user",
597-
];
592+
const sortOptions: Array<
593+
"date" | "freq" | "new" | "user" | "recommended"
594+
> = ["date", "freq", "new", "user", "recommended"];
598595

599596
for (const sortOption of sortOptions) {
600597
mockGenerateText.mockResolvedValue(mockAIResponse("", sortOption));

packages/mcp-core/src/tools/catalog/search-issues.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const ProjectSlugOrIdSchema = z.string().trim().superRefine(validateSlugOrId);
1717

1818
function buildIssueSearchRepairPrompt(params: {
1919
query: string;
20-
sort: "date" | "freq" | "new" | "user";
20+
sort: "date" | "freq" | "new" | "user" | "recommended";
2121
}): string {
2222
return [
2323
"Fix this Sentry issue search request.",
@@ -80,10 +80,10 @@ export default defineTool({
8080
.default("is:unresolved")
8181
.describe("Natural language or Sentry issue search query syntax."),
8282
sort: z
83-
.enum(["date", "freq", "new", "user"])
83+
.enum(["date", "freq", "new", "user", "recommended"])
8484
.default("date")
8585
.describe(
86-
"Sort order: date (last seen), freq (frequency), new (first seen), user (user count)",
86+
"Sort order: date (last seen), freq (frequency), new (first seen), user (user count), recommended (Sentry's prioritized ranking)",
8787
),
8888
projectSlugOrId: ProjectSlugOrIdSchema.nullable()
8989
.default(null)
@@ -127,7 +127,7 @@ export default defineTool({
127127
}
128128

129129
let query: string;
130-
let sort: "date" | "freq" | "new" | "user";
130+
let sort: "date" | "freq" | "new" | "user" | "recommended";
131131
let explanation: string | undefined;
132132

133133
let projectId: string | undefined;

packages/mcp-core/src/tools/support/search-issues/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ The AI agent has access to these shared agent tools from `../../agent-tools/`:
3333
- ✅ Error feedback loop for self-correction
3434
- ✅ 'Me' reference resolution via whoami tool
3535
- ✅ Field discovery with custom tags
36-
- ✅ Smart sort options (date, freq, new, user)
36+
- ✅ Smart sort options (date, freq, new, user, recommended)
3737
- ✅ Configurable result limits (1-100, default 10)
3838
- ✅ Project-specific and organization-wide searches
3939

packages/mcp-core/src/tools/support/search-issues/agent.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { systemPrompt } from "./config";
1111
export const searchIssuesAgentOutputSchema = z.object({
1212
query: z.string().describe("The Sentry issue search query"),
1313
sort: z
14-
.enum(["date", "freq", "new", "user"])
14+
.enum(["date", "freq", "new", "user", "recommended"])
1515
.nullable()
1616
.describe("How to sort the results"),
1717
explanation: z

packages/mcp-core/src/tools/support/search-issues/config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,10 @@ SORTING RULES:
6969
- freq: Event frequency
7070
- new: First seen
7171
- user: User count
72+
- recommended: Sentry's prioritized ranking
7273
- If the user asks to sort/rank by users or impact, set sort to user.
7374
- If the user asks for most frequent/noisy issues, set sort to freq.
75+
- If the user asks for what to look at/prioritize/triage first, set sort to recommended.
7476
- Never put sort syntax inside query.
7577
7678
ME REFERENCES:

0 commit comments

Comments
 (0)