Skip to main content
Glama
yuezheng2006

Personal JIRA MCP

by yuezheng2006

get_issue

Retrieve specific JIRA issue details by providing an issue key to access work item information through the Personal JIRA MCP server.

Instructions

获取JIRA问题详情

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
issue_keyYes

Implementation Reference

  • The main handler function for the 'get_issue' MCP tool. Decorated with @mcp.tool, it fetches the JIRA issue by key using the JIRA client and formats it using the format_issue helper.
    @mcp.tool(
        description="获取JIRA问题详情",
    )
    def get_issue(
        issue_key: str,
    ) -> Dict[str, Any]:
        """获取JIRA问题详情.
        
        Args:
            issue_key: JIRA问题键
        
        Returns:
            Dict[str, Any]: 问题详情
        """
        logger.info(f"获取问题: {issue_key}")
        try:
            client = get_jira_client()
            issue = client.issue(issue_key)
            return format_issue(issue)
        except Exception as e:
            logger.error(f"获取问题 {issue_key} 失败: {str(e)}")
            return {"error": str(e)}
  • Helper function used by get_issue to format the raw JIRA issue object into a structured dictionary with key fields like summary, status, assignee, attachments, etc.
    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
  • Helper function to lazily initialize and return the JIRA client instance, used by get_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

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/yuezheng2006/mcp-server-jira'

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