Skip to content

Commit 833663a

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 1d75880 commit 833663a

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
@@ -2793,7 +2793,7 @@ export class SentryApiService {
27932793
* @param params.organizationSlug Organization identifier
27942794
* @param params.projectSlug Project identifier (optional, scopes to specific project)
27952795
* @param params.query Sentry search query (e.g., "is:unresolved browser:chrome")
2796-
* @param params.sortBy Sort order ("user", "freq", "date", "new")
2796+
* @param params.sortBy Sort order ("user", "freq", "date", "new", "recommended")
27972797
* @param opts Request options
27982798
* @returns Array of issues with metadata and statistics
27992799
*
@@ -2826,7 +2826,7 @@ export class SentryApiService {
28262826
organizationSlug: string;
28272827
projectSlug?: string;
28282828
query?: string | null;
2829-
sortBy?: "user" | "freq" | "date" | "new";
2829+
sortBy?: "user" | "freq" | "date" | "new" | "recommended";
28302830
limit?: number;
28312831
},
28322832
opts?: RequestOptions,

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
@@ -2044,9 +2044,9 @@
20442044
},
20452045
"sort": {
20462046
"type": "string",
2047-
"enum": ["date", "freq", "new", "user"],
2047+
"enum": ["date", "freq", "new", "user", "recommended"],
20482048
"default": "date",
2049-
"description": "Sort order: date (last seen), freq (frequency), new (first seen), user (user count)"
2049+
"description": "Sort order: date (last seen), freq (frequency), new (first seen), user (user count), recommended (Sentry's prioritized ranking)"
20502050
},
20512051
"projectSlugOrId": {
20522052
"anyOf": [

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ describe("search_issues", () => {
3838
// Helper to create AI agent response
3939
const mockAIResponse = (
4040
query = "",
41-
sort: "date" | "freq" | "new" | "user" | null = "date",
41+
sort: "date" | "freq" | "new" | "user" | "recommended" | null = "date",
4242
errorMessage?: string,
4343
) => {
4444
const output = errorMessage
@@ -527,12 +527,9 @@ describe("search_issues", () => {
527527
});
528528

529529
it("should handle all sort options", async () => {
530-
const sortOptions: Array<"date" | "freq" | "new" | "user"> = [
531-
"date",
532-
"freq",
533-
"new",
534-
"user",
535-
];
530+
const sortOptions: Array<
531+
"date" | "freq" | "new" | "user" | "recommended"
532+
> = ["date", "freq", "new", "user", "recommended"];
536533

537534
for (const sortOption of sortOptions) {
538535
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
@@ -14,7 +14,7 @@ import {
1414

1515
function buildIssueSearchRepairPrompt(params: {
1616
query: string;
17-
sort: "date" | "freq" | "new" | "user";
17+
sort: "date" | "freq" | "new" | "user" | "recommended";
1818
}): string {
1919
return [
2020
"Fix this Sentry issue search request.",
@@ -77,10 +77,10 @@ export default defineTool({
7777
.default("is:unresolved")
7878
.describe("Natural language or Sentry issue search query syntax."),
7979
sort: z
80-
.enum(["date", "freq", "new", "user"])
80+
.enum(["date", "freq", "new", "user", "recommended"])
8181
.default("date")
8282
.describe(
83-
"Sort order: date (last seen), freq (frequency), new (first seen), user (user count)",
83+
"Sort order: date (last seen), freq (frequency), new (first seen), user (user count), recommended (Sentry's prioritized ranking)",
8484
),
8585
projectSlugOrId: z
8686
.string()
@@ -123,7 +123,7 @@ export default defineTool({
123123
}
124124

125125
let query: string;
126-
let sort: "date" | "freq" | "new" | "user";
126+
let sort: "date" | "freq" | "new" | "user" | "recommended";
127127
let explanation: string | undefined;
128128

129129
if (hasAgentProvider()) {

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)