create_issue
Create GitHub issues from PR analysis to track problems and improvements, automatically linking them in pull request descriptions for better project management.
Instructions
Creates a new issue in the specified GitHub repository. If the issue is created successfully, a link to the issue must be appended in the PR's description. Args: repo_owner (str): The owner of the repository. repo_name (str): The name of the repository. title (str): The title of the issue to be created. body (str): The body content of the issue. labels (list[str]): A list of labels to assign to the issue. The label 'mcp' will always be included. Returns: Dict[str, Any]: A dictionary containing the created issue's data if successful. None: If an error occurs during issue creation. Error Handling: Logs errors and prints the traceback if the issue creation fails, returning None.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| repo_owner | Yes | ||
| repo_name | Yes | ||
| title | Yes | ||
| body | Yes | ||
| labels | Yes |
Implementation Reference
- The core handler function implementing the 'create_issue' MCP tool. It uses the GitHub REST API to create a new issue in the specified repository, automatically adding the 'mcp' label, and handles errors gracefully.def create_issue(self, repo_owner: str, repo_name: str, title: str, body: str, labels: list[str]) -> Dict[str, Any]: """ Creates a new issue in the specified GitHub repository. If the issue is created successfully, a link to the issue must be appended in the PR's description. Args: repo_owner (str): The owner of the repository. repo_name (str): The name of the repository. title (str): The title of the issue to be created. body (str): The body content of the issue. labels (list[str]): A list of labels to assign to the issue. The label 'mcp' will always be included. Returns: Dict[str, Any]: A dictionary containing the created issue's data if successful. None: If an error occurs during issue creation. Error Handling: Logs errors and prints the traceback if the issue creation fails, returning None. """ logging.info(f"Creating issue in {repo_owner}/{repo_name}") # Construct the issues URL issues_url = f"https://api.github.com/repos/{repo_owner}/{repo_name}/issues" try: # Create the issue issue_labels = ['mcp'] if not labels else labels + ['mcp'] response = requests.post(issues_url, headers=self._get_headers(), json={ 'title': title, 'body': body, 'labels': issue_labels }, timeout=TIMEOUT) response.raise_for_status() issue_data = response.json() logging.info("Issue created successfully") return issue_data except Exception as e: logging.error(f"Error creating issue: {str(e)}") traceback.print_exc() return {"status": "error", "message": str(e)}
- src/mcp_github/issues_pr_analyser.py:105-113 (registration)Dynamic registration of all public methods from GitHubIntegration instance (including create_issue) as MCP tools via FastMCP.add_tool().def _register_tools(self): self.register_tools(self.gi) self.register_tools(self.ip) def register_tools(self, methods: Any = None) -> None: for name, method in inspect.getmembers(methods): if (inspect.isfunction(method) or inspect.ismethod(method)) and not name.startswith("_"): self.mcp.add_tool(method)