pnd-jira-mcp 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,226 @@
1
+ Metadata-Version: 2.4
2
+ Name: pnd-jira-mcp
3
+ Version: 1.0.0
4
+ Summary: Standalone Jira MCP (Model Context Protocol) connector for Claude Desktop integration
5
+ Author-email: Pandora Group <tech@pandora.net>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/shvee-pandora/pnd-jira-mcp
8
+ Project-URL: Repository, https://github.com/shvee-pandora/pnd-jira-mcp
9
+ Project-URL: Documentation, https://github.com/shvee-pandora/pnd-jira-mcp#readme
10
+ Keywords: mcp,jira,claude,atlassian,connector
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Requires-Python: >=3.10
19
+ Description-Content-Type: text/markdown
20
+ Requires-Dist: httpx>=0.25.0
21
+ Requires-Dist: mcp>=1.0.0
22
+ Provides-Extra: dev
23
+ Requires-Dist: pytest>=7.4.0; extra == "dev"
24
+ Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
25
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
26
+
27
+ # pnd-jira-mcp
28
+
29
+ A standalone Jira MCP (Model Context Protocol) connector for Claude Desktop integration.
30
+
31
+ ## Installation
32
+
33
+ ```bash
34
+ pip install pnd-jira-mcp
35
+ ```
36
+
37
+ ## Quick Start
38
+
39
+ 1. Set environment variables:
40
+
41
+ ```bash
42
+ export JIRA_BASE_URL="https://your-instance.atlassian.net"
43
+ export JIRA_EMAIL="your-email@example.com"
44
+ export JIRA_API_TOKEN="your-api-token"
45
+ ```
46
+
47
+ 2. Run the MCP server:
48
+
49
+ ```bash
50
+ pnd-jira-mcp
51
+ ```
52
+
53
+ Or via Python:
54
+
55
+ ```bash
56
+ python -m pnd_jira_mcp
57
+ ```
58
+
59
+ ## Claude Desktop Integration
60
+
61
+ Add to your Claude Desktop configuration (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
62
+
63
+ ```json
64
+ {
65
+ "mcpServers": {
66
+ "jira": {
67
+ "command": "pnd-jira-mcp",
68
+ "env": {
69
+ "JIRA_BASE_URL": "https://your-instance.atlassian.net",
70
+ "JIRA_EMAIL": "your-email@example.com",
71
+ "JIRA_API_TOKEN": "your-api-token"
72
+ }
73
+ }
74
+ }
75
+ }
76
+ ```
77
+
78
+ ## Available Tools
79
+
80
+ ### Issue Operations
81
+
82
+ #### get_issue
83
+ Get details of a Jira issue by key.
84
+ ```json
85
+ {"issue_key": "PROJ-123"}
86
+ ```
87
+
88
+ #### search_issues
89
+ Search for Jira issues using JQL.
90
+ ```json
91
+ {"jql": "project = PROJ AND status = Open", "max_results": 50}
92
+ ```
93
+
94
+ #### add_comment
95
+ Add a comment to a Jira issue (supports markdown).
96
+ ```json
97
+ {"issue_key": "PROJ-123", "body": "This is a **markdown** comment"}
98
+ ```
99
+
100
+ #### add_label
101
+ Add a label to a Jira issue.
102
+ ```json
103
+ {"issue_key": "PROJ-123", "label": "reviewed"}
104
+ ```
105
+
106
+ #### update_fields
107
+ Update fields on a Jira issue.
108
+ ```json
109
+ {"issue_key": "PROJ-123", "fields": {"summary": "New summary"}}
110
+ ```
111
+
112
+ #### update_ai_fields
113
+ Update AI-related custom fields.
114
+ ```json
115
+ {"issue_key": "PROJ-123", "ai_used": true, "agent_name": "Claude"}
116
+ ```
117
+
118
+ ### Transition Operations
119
+
120
+ #### get_transitions
121
+ Get available transitions for an issue.
122
+ ```json
123
+ {"issue_key": "PROJ-123"}
124
+ ```
125
+
126
+ #### transition_issue
127
+ Transition an issue to a new status.
128
+ ```json
129
+ {"issue_key": "PROJ-123", "transition_id": "31"}
130
+ ```
131
+
132
+ ### Sprint Operations
133
+
134
+ #### get_boards
135
+ Get all Jira boards, optionally filtered by project or type.
136
+ ```json
137
+ {"project_key": "PROJ", "board_type": "scrum"}
138
+ ```
139
+
140
+ #### get_sprints
141
+ Get sprints for a board.
142
+ ```json
143
+ {"board_id": 123, "state": "active"}
144
+ ```
145
+
146
+ #### get_sprint
147
+ Get details of a specific sprint.
148
+ ```json
149
+ {"sprint_id": 456}
150
+ ```
151
+
152
+ #### get_active_sprint
153
+ Get the currently active sprint for a board.
154
+ ```json
155
+ {"board_id": 123}
156
+ ```
157
+
158
+ #### get_sprint_issues
159
+ Get all issues in a sprint.
160
+ ```json
161
+ {"sprint_id": 456, "max_results": 200}
162
+ ```
163
+
164
+ ### Utility
165
+
166
+ #### test_connection
167
+ Test the Jira connection and verify credentials.
168
+ ```json
169
+ {}
170
+ ```
171
+
172
+ ## Environment Variables
173
+
174
+ | Variable | Description | Required |
175
+ |----------|-------------|----------|
176
+ | `JIRA_BASE_URL` | Jira instance URL | Yes |
177
+ | `JIRA_EMAIL` | Jira account email | Yes |
178
+ | `JIRA_API_TOKEN` | Jira API token | Yes |
179
+ | `JIRA_FIELD_AI_USED` | Custom field ID for AI used flag | No |
180
+ | `JIRA_FIELD_AGENT_NAME` | Custom field ID for agent name | No |
181
+ | `JIRA_FIELD_EFFICIENCY_SCORE` | Custom field ID for efficiency score | No |
182
+ | `JIRA_FIELD_DURATION` | Custom field ID for duration | No |
183
+
184
+ ## Getting a Jira API Token
185
+
186
+ 1. Go to https://id.atlassian.com/manage-profile/security/api-tokens
187
+ 2. Click "Create API token"
188
+ 3. Give it a descriptive name
189
+ 4. Copy the token and store it securely
190
+
191
+ ## Example Usage in Claude
192
+
193
+ Once configured, you can ask Claude to interact with Jira:
194
+
195
+ - "Add a comment to PROJ-123 saying the code review is complete"
196
+ - "What's the status of PROJ-456?"
197
+ - "Move PROJ-789 to In Progress"
198
+ - "Find all open bugs in the PROJ project"
199
+ - "Show me the active sprint for board 123"
200
+ - "List all issues in the current sprint"
201
+
202
+ ## Programmatic Usage
203
+
204
+ ```python
205
+ from pnd_jira_mcp import JiraClient, JiraConfig
206
+
207
+ config = JiraConfig(
208
+ base_url="https://your-instance.atlassian.net",
209
+ email="your-email@example.com",
210
+ api_token="your-api-token"
211
+ )
212
+
213
+ with JiraClient(config=config) as client:
214
+ issue = client.get_issue("PROJ-123")
215
+ print(f"Issue: {issue.summary}")
216
+
217
+ # Get active sprint
218
+ boards = client.get_boards(project_key="PROJ")
219
+ if boards:
220
+ sprint = client.get_active_sprint(boards[0]["id"])
221
+ print(f"Active sprint: {sprint['name']}")
222
+ ```
223
+
224
+ ## License
225
+
226
+ MIT
@@ -0,0 +1,200 @@
1
+ # pnd-jira-mcp
2
+
3
+ A standalone Jira MCP (Model Context Protocol) connector for Claude Desktop integration.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ pip install pnd-jira-mcp
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ 1. Set environment variables:
14
+
15
+ ```bash
16
+ export JIRA_BASE_URL="https://your-instance.atlassian.net"
17
+ export JIRA_EMAIL="your-email@example.com"
18
+ export JIRA_API_TOKEN="your-api-token"
19
+ ```
20
+
21
+ 2. Run the MCP server:
22
+
23
+ ```bash
24
+ pnd-jira-mcp
25
+ ```
26
+
27
+ Or via Python:
28
+
29
+ ```bash
30
+ python -m pnd_jira_mcp
31
+ ```
32
+
33
+ ## Claude Desktop Integration
34
+
35
+ Add to your Claude Desktop configuration (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
36
+
37
+ ```json
38
+ {
39
+ "mcpServers": {
40
+ "jira": {
41
+ "command": "pnd-jira-mcp",
42
+ "env": {
43
+ "JIRA_BASE_URL": "https://your-instance.atlassian.net",
44
+ "JIRA_EMAIL": "your-email@example.com",
45
+ "JIRA_API_TOKEN": "your-api-token"
46
+ }
47
+ }
48
+ }
49
+ }
50
+ ```
51
+
52
+ ## Available Tools
53
+
54
+ ### Issue Operations
55
+
56
+ #### get_issue
57
+ Get details of a Jira issue by key.
58
+ ```json
59
+ {"issue_key": "PROJ-123"}
60
+ ```
61
+
62
+ #### search_issues
63
+ Search for Jira issues using JQL.
64
+ ```json
65
+ {"jql": "project = PROJ AND status = Open", "max_results": 50}
66
+ ```
67
+
68
+ #### add_comment
69
+ Add a comment to a Jira issue (supports markdown).
70
+ ```json
71
+ {"issue_key": "PROJ-123", "body": "This is a **markdown** comment"}
72
+ ```
73
+
74
+ #### add_label
75
+ Add a label to a Jira issue.
76
+ ```json
77
+ {"issue_key": "PROJ-123", "label": "reviewed"}
78
+ ```
79
+
80
+ #### update_fields
81
+ Update fields on a Jira issue.
82
+ ```json
83
+ {"issue_key": "PROJ-123", "fields": {"summary": "New summary"}}
84
+ ```
85
+
86
+ #### update_ai_fields
87
+ Update AI-related custom fields.
88
+ ```json
89
+ {"issue_key": "PROJ-123", "ai_used": true, "agent_name": "Claude"}
90
+ ```
91
+
92
+ ### Transition Operations
93
+
94
+ #### get_transitions
95
+ Get available transitions for an issue.
96
+ ```json
97
+ {"issue_key": "PROJ-123"}
98
+ ```
99
+
100
+ #### transition_issue
101
+ Transition an issue to a new status.
102
+ ```json
103
+ {"issue_key": "PROJ-123", "transition_id": "31"}
104
+ ```
105
+
106
+ ### Sprint Operations
107
+
108
+ #### get_boards
109
+ Get all Jira boards, optionally filtered by project or type.
110
+ ```json
111
+ {"project_key": "PROJ", "board_type": "scrum"}
112
+ ```
113
+
114
+ #### get_sprints
115
+ Get sprints for a board.
116
+ ```json
117
+ {"board_id": 123, "state": "active"}
118
+ ```
119
+
120
+ #### get_sprint
121
+ Get details of a specific sprint.
122
+ ```json
123
+ {"sprint_id": 456}
124
+ ```
125
+
126
+ #### get_active_sprint
127
+ Get the currently active sprint for a board.
128
+ ```json
129
+ {"board_id": 123}
130
+ ```
131
+
132
+ #### get_sprint_issues
133
+ Get all issues in a sprint.
134
+ ```json
135
+ {"sprint_id": 456, "max_results": 200}
136
+ ```
137
+
138
+ ### Utility
139
+
140
+ #### test_connection
141
+ Test the Jira connection and verify credentials.
142
+ ```json
143
+ {}
144
+ ```
145
+
146
+ ## Environment Variables
147
+
148
+ | Variable | Description | Required |
149
+ |----------|-------------|----------|
150
+ | `JIRA_BASE_URL` | Jira instance URL | Yes |
151
+ | `JIRA_EMAIL` | Jira account email | Yes |
152
+ | `JIRA_API_TOKEN` | Jira API token | Yes |
153
+ | `JIRA_FIELD_AI_USED` | Custom field ID for AI used flag | No |
154
+ | `JIRA_FIELD_AGENT_NAME` | Custom field ID for agent name | No |
155
+ | `JIRA_FIELD_EFFICIENCY_SCORE` | Custom field ID for efficiency score | No |
156
+ | `JIRA_FIELD_DURATION` | Custom field ID for duration | No |
157
+
158
+ ## Getting a Jira API Token
159
+
160
+ 1. Go to https://id.atlassian.com/manage-profile/security/api-tokens
161
+ 2. Click "Create API token"
162
+ 3. Give it a descriptive name
163
+ 4. Copy the token and store it securely
164
+
165
+ ## Example Usage in Claude
166
+
167
+ Once configured, you can ask Claude to interact with Jira:
168
+
169
+ - "Add a comment to PROJ-123 saying the code review is complete"
170
+ - "What's the status of PROJ-456?"
171
+ - "Move PROJ-789 to In Progress"
172
+ - "Find all open bugs in the PROJ project"
173
+ - "Show me the active sprint for board 123"
174
+ - "List all issues in the current sprint"
175
+
176
+ ## Programmatic Usage
177
+
178
+ ```python
179
+ from pnd_jira_mcp import JiraClient, JiraConfig
180
+
181
+ config = JiraConfig(
182
+ base_url="https://your-instance.atlassian.net",
183
+ email="your-email@example.com",
184
+ api_token="your-api-token"
185
+ )
186
+
187
+ with JiraClient(config=config) as client:
188
+ issue = client.get_issue("PROJ-123")
189
+ print(f"Issue: {issue.summary}")
190
+
191
+ # Get active sprint
192
+ boards = client.get_boards(project_key="PROJ")
193
+ if boards:
194
+ sprint = client.get_active_sprint(boards[0]["id"])
195
+ print(f"Active sprint: {sprint['name']}")
196
+ ```
197
+
198
+ ## License
199
+
200
+ MIT
@@ -0,0 +1,28 @@
1
+ """
2
+ pnd-jira-mcp - Standalone Jira MCP Connector
3
+
4
+ A standalone MCP (Model Context Protocol) server for Jira integration.
5
+ Can be installed via pip and used independently without any other dependencies.
6
+
7
+ Usage:
8
+ pnd-jira-mcp
9
+
10
+ Or via Python:
11
+ python -m pnd_jira_mcp
12
+ """
13
+
14
+ from .server import JiraMCPServer, main, main_sync
15
+ from .client import JiraClient, JiraConfig, JiraIssue
16
+ from .tools import get_jira_tools
17
+
18
+ __version__ = "1.0.0"
19
+ __all__ = [
20
+ "JiraMCPServer",
21
+ "JiraClient",
22
+ "JiraConfig",
23
+ "JiraIssue",
24
+ "get_jira_tools",
25
+ "main",
26
+ "main_sync",
27
+ "__version__",
28
+ ]
@@ -0,0 +1,12 @@
1
+ """
2
+ Entry point for running Jira MCP server as a module.
3
+
4
+ Usage:
5
+ python -m pnd_jira_mcp
6
+ """
7
+
8
+ import asyncio
9
+ from .server import main
10
+
11
+ if __name__ == "__main__":
12
+ asyncio.run(main())