create_issue
Create and manage JIRA issues with specified project key, summary, description, issue type, priority, assignee, and labels using the Personal JIRA MCP server.
Instructions
创建JIRA问题
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| assignee | No | ||
| description | No | ||
| issue_type | No | Task | |
| labels | No | ||
| priority | No | ||
| project_key | Yes | ||
| summary | Yes |
Implementation Reference
- src/jira_mcp/server.py:269-324 (handler)The 'create_issue' tool handler: decorated with @mcp.tool for registration, handles input parameters to build Jira issue fields, calls Jira client to create issue, formats and returns the result or error.@mcp.tool( description="创建JIRA问题", ) def create_issue( project_key: str, summary: str, description: str = "", issue_type: str = "Task", priority: Optional[str] = None, assignee: Optional[str] = None, labels: Optional[List[str]] = None, ) -> Dict[str, Any]: """创建JIRA问题. Args: project_key: 项目键 summary: 问题概要 description: 问题描述 issue_type: 问题类型 priority: 优先级 assignee: 经办人 labels: 标签列表 Returns: Dict[str, Any]: 创建的问题详情 """ logger.info(f"创建问题: project={project_key}, summary={summary}") try: # 构建问题字段 fields = { "project": {"key": project_key}, "summary": summary, "issuetype": {"name": issue_type}, } if description: fields["description"] = description if priority: fields["priority"] = {"name": priority} if assignee: fields["assignee"] = {"name": assignee} if labels: fields["labels"] = labels # 创建问题 client = get_jira_client() issue = client.create_issue(fields=fields) return format_issue(issue) except Exception as e: logger.error(f"创建问题失败: {str(e)}") return {"error": str(e)}
- src/jira_mcp/server.py:48-129 (helper)Helper function format_issue used by create_issue to format the returned Jira issue into a JSON-friendly dictionary.def format_issue(issue) -> Dict[str, Any]: """格式化JIRA问题为JSON友好格式.""" fields = issue.fields result = { "id": issue.id, "key": issue.key, "self": issue.self, "summary": fields.summary, "description": fields.description or "", "status": { "id": fields.status.id, "name": fields.status.name, "description": fields.status.description, }, "project": { "id": fields.project.id, "key": fields.project.key, "name": fields.project.name, }, "created": fields.created, "updated": fields.updated, } # 添加可选字段 if hasattr(fields, "assignee") and fields.assignee: result["assignee"] = { "name": fields.assignee.name, "display_name": fields.assignee.displayName, "email": getattr(fields.assignee, "emailAddress", ""), } if hasattr(fields, "reporter") and fields.reporter: result["reporter"] = { "name": fields.reporter.name, "display_name": fields.reporter.displayName, "email": getattr(fields.reporter, "emailAddress", ""), } if hasattr(fields, "issuetype") and fields.issuetype: result["issue_type"] = { "id": fields.issuetype.id, "name": fields.issuetype.name, "description": fields.issuetype.description, } if hasattr(fields, "priority") and fields.priority: result["priority"] = { "id": fields.priority.id, "name": fields.priority.name, } if hasattr(fields, "components") and fields.components: result["components"] = [ {"id": c.id, "name": c.name} for c in fields.components ] if hasattr(fields, "labels") and fields.labels: result["labels"] = fields.labels # 处理附件 - JIRA API 使用 "attachment" 字段 if hasattr(fields, "attachment") and fields.attachment: result["attachments"] = [ { "id": attachment.id, "filename": attachment.filename, "size": attachment.size, "content_type": attachment.mimeType, "created": attachment.created, "url": attachment.content } for attachment in fields.attachment ] # 获取自定义字段 for field_name in dir(fields): if field_name.startswith("customfield_"): value = getattr(fields, field_name) if value is not None: result[field_name] = value return result
- src/jira_mcp/server.py:39-46 (helper)Helper function to get or initialize the Jira client instance, used in create_issue.def get_jira_client() -> JIRA: """获取JIRA客户端实例.""" global jira_client if jira_client is None: auth = get_jira_auth() jira_client = JIRA(server=jira_settings.server_url, basic_auth=auth) return jira_client