Skip to main content
Glama

MCP Atlassian

by uchinx
MIT License
  • Apple
  • Linux
project.py3.13 kB
""" Jira project models. This module provides Pydantic models for Jira projects. """ import logging from typing import Any from ..base import ApiModel from ..constants import ( EMPTY_STRING, JIRA_DEFAULT_PROJECT, UNKNOWN, ) from .common import JiraUser logger = logging.getLogger(__name__) class JiraProject(ApiModel): """ Model representing a Jira project. This model contains the basic information about a Jira project, including its key, name, and category. """ id: str = JIRA_DEFAULT_PROJECT key: str = EMPTY_STRING name: str = UNKNOWN description: str | None = None lead: JiraUser | None = None url: str | None = None category_name: str | None = None avatar_url: str | None = None @classmethod def from_api_response(cls, data: dict[str, Any], **kwargs: Any) -> "JiraProject": """ Create a JiraProject from a Jira API response. Args: data: The project data from the Jira API Returns: A JiraProject instance """ if not data: return cls() # Handle non-dictionary data by returning a default instance if not isinstance(data, dict): logger.debug("Received non-dictionary data, returning default instance") return cls() # Extract lead data if available lead = None lead_data = data.get("lead") if lead_data: lead = JiraUser.from_api_response(lead_data) # Get avatar URL from avatarUrls if available avatar_url = None if avatars := data.get("avatarUrls"): if isinstance(avatars, dict): # Get the largest available avatar (48x48) avatar_url = avatars.get("48x48") # Get project category name if available category_name = None if project_category := data.get("projectCategory"): if isinstance(project_category, dict): category_name = project_category.get("name") # Ensure ID is a string project_id = data.get("id", JIRA_DEFAULT_PROJECT) if project_id is not None: project_id = str(project_id) return cls( id=project_id, key=str(data.get("key", EMPTY_STRING)), name=str(data.get("name", UNKNOWN)), description=data.get("description"), lead=lead, url=data.get("self"), # API URL for the project category_name=category_name, avatar_url=avatar_url, ) def to_simplified_dict(self) -> dict[str, Any]: """Convert to simplified dictionary for API response.""" result = { "key": self.key, "name": self.name, } if self.description: result["description"] = self.description if self.category_name: result["category"] = self.category_name if self.avatar_url: result["avatar_url"] = self.avatar_url if self.lead: result["lead"] = self.lead.to_simplified_dict() return result

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/uchinx/mcp-atlassian'

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