Skip to main content
Glama
kornbed

Jira MCP Server for Cursor

create_ticket

Create new Jira tickets directly from Cursor editor by specifying summary, description, project key, and issue type.

Instructions

Create a new Jira ticket

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
ticketYes

Implementation Reference

  • The handler function for the create_ticket tool. It validates the Jira configuration, constructs the issue fields from the input ticket, optionally adds a parent link, creates the issue using the Jira API, and returns a success message with the new ticket key or an error message.
    async ({ ticket }: { ticket: JiraTicket }) => {
      const configError = validateJiraConfig();
      if (configError) {
        return {
          content: [{ type: "text", text: `Configuration error: ${configError}` }],
        };
      }
    
      try {
        const fields: any = {
          project: { key: ticket.projectKey },
          summary: ticket.summary,
          description: ticket.description,
          issuetype: { name: ticket.issueType },
        };
    
        // Add parent/epic link if specified
        if (ticket.parent) {
          fields.parent = { key: ticket.parent };
        }
    
        const newTicket = await jira.issues.createIssue({
          fields: fields,
        });
    
        return {
          content: [{ type: "text", text: `Created ticket: ${newTicket.key}` }],
        };
      } catch (error) {
        return {
          content: [{ type: "text", text: `Failed to create ticket: ${(error as Error).message}` }],
        };
      }
    }
  • Zod schema used to validate the input 'ticket' parameter for the create_ticket tool.
    const TicketSchema = z.object({
      summary: z.string().describe("The ticket summary"),
      description: z.string().describe("The ticket description"),
      projectKey: z.string().describe("The project key (e.g., PROJECT)"),
      issueType: z.string().describe("The type of issue (e.g., Task, Bug)"),
      parent: z.string().optional().describe("The parent/epic key (for next-gen projects)"),
    });
  • src/server.ts:271-311 (registration)
    The MCP server.tool() call that registers the create_ticket tool, specifying its name, description, input schema, and handler function.
    server.tool(
      "create_ticket",
      "Create a new Jira ticket",
      {
        ticket: TicketSchema,
      },
      async ({ ticket }: { ticket: JiraTicket }) => {
        const configError = validateJiraConfig();
        if (configError) {
          return {
            content: [{ type: "text", text: `Configuration error: ${configError}` }],
          };
        }
    
        try {
          const fields: any = {
            project: { key: ticket.projectKey },
            summary: ticket.summary,
            description: ticket.description,
            issuetype: { name: ticket.issueType },
          };
    
          // Add parent/epic link if specified
          if (ticket.parent) {
            fields.parent = { key: ticket.parent };
          }
    
          const newTicket = await jira.issues.createIssue({
            fields: fields,
          });
    
          return {
            content: [{ type: "text", text: `Created ticket: ${newTicket.key}` }],
          };
        } catch (error) {
          return {
            content: [{ type: "text", text: `Failed to create ticket: ${(error as Error).message}` }],
          };
        }
      }
    );
  • TypeScript interface defining the structure of the JiraTicket type used in the create_ticket handler's type annotation.
    interface JiraTicket {
      summary: string;
      description: string;
      projectKey: string;
      issueType: string;
      parent?: string; // Optional parent/epic key for next-gen projects
    }
  • Helper function called by the handler to validate that required Jira environment variables are set before attempting to create a ticket.
    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