Skip to main content
Glama
kornbed

Jira MCP Server for Cursor

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
NameRequiredDescriptionDefault
jqlNoOptional JQL query to filter tickets

Implementation Reference

  • 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}` }], }; } }
  • 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}` }], }; } } );
  • 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; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kornbed/jira-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server