list_tickets
Retrieve Jira tickets assigned to you using optional JQL queries to filter results directly within your editor.
Instructions
List Jira tickets assigned to you
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| jql | No | Optional JQL query to filter tickets |
Implementation Reference
- src/server.ts:124-156 (handler)The handler function for the 'list_tickets' tool. It validates Jira configuration, executes a JQL query (defaulting to tickets assigned to current user), fetches issues via Jira API, formats them as key: summary (status), and returns as text content.async ({ jql }: { jql?: string }) => { const configError = validateJiraConfig(); if (configError) { return { content: [{ type: "text", text: `Configuration error: ${configError}` }], }; } try { const query = jql || 'assignee = currentUser() ORDER BY updated DESC'; const tickets = await jira.issueSearch.searchForIssuesUsingJql({ jql: query }); if (!tickets.issues || tickets.issues.length === 0) { return { content: [{ type: "text", text: "No tickets found" }], }; } const formattedTickets = tickets.issues.map((issue) => { const summary = issue.fields?.summary || 'No summary'; const status = issue.fields?.status?.name || 'Unknown status'; return `${issue.key}: ${summary} (${status})`; }).join('\n'); return { content: [{ type: "text", text: formattedTickets }], }; } catch (error) { return { content: [{ type: "text", text: `Failed to fetch tickets: ${(error as Error).message}` }], }; } }
- src/server.ts:122-123 (schema)Input schema for the 'list_tickets' tool, defining an optional 'jql' parameter using Zod for validation.jql: z.string().optional().describe("Optional JQL query to filter tickets"), },
- src/server.ts:118-157 (registration)Registration of the 'list_tickets' tool on the MCP server, including name, description, input schema, and handler function.server.tool( "list_tickets", "List Jira tickets assigned to you", { jql: z.string().optional().describe("Optional JQL query to filter tickets"), }, async ({ jql }: { jql?: string }) => { const configError = validateJiraConfig(); if (configError) { return { content: [{ type: "text", text: `Configuration error: ${configError}` }], }; } try { const query = jql || 'assignee = currentUser() ORDER BY updated DESC'; const tickets = await jira.issueSearch.searchForIssuesUsingJql({ jql: query }); if (!tickets.issues || tickets.issues.length === 0) { return { content: [{ type: "text", text: "No tickets found" }], }; } const formattedTickets = tickets.issues.map((issue) => { const summary = issue.fields?.summary || 'No summary'; const status = issue.fields?.status?.name || 'Unknown status'; return `${issue.key}: ${summary} (${status})`; }).join('\n'); return { content: [{ type: "text", text: formattedTickets }], }; } catch (error) { return { content: [{ type: "text", text: `Failed to fetch tickets: ${(error as Error).message}` }], }; } } );
- src/server.ts:90-95 (helper)Helper function to validate Jira configuration environment variables, called at the start of the list_tickets handler.function validateJiraConfig(): string | null { if (!process.env.JIRA_HOST) return "JIRA_HOST environment variable is not set"; if (!process.env.JIRA_EMAIL) return "JIRA_EMAIL environment variable is not set"; if (!process.env.JIRA_API_TOKEN) return "JIRA_API_TOKEN environment variable is not set"; return null; }