jama-cli 0.1.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.
- jama_cli-0.1.0/LICENSE +55 -0
- jama_cli-0.1.0/NOTICE +116 -0
- jama_cli-0.1.0/PKG-INFO +526 -0
- jama_cli-0.1.0/README.md +486 -0
- jama_cli-0.1.0/jama_cli/__init__.py +11 -0
- jama_cli-0.1.0/jama_cli/commands/__init__.py +2 -0
- jama_cli-0.1.0/jama_cli/commands/attachments.py +73 -0
- jama_cli-0.1.0/jama_cli/commands/baseline.py +289 -0
- jama_cli-0.1.0/jama_cli/commands/config_cmd.py +390 -0
- jama_cli-0.1.0/jama_cli/commands/diff.py +462 -0
- jama_cli-0.1.0/jama_cli/commands/history.py +225 -0
- jama_cli-0.1.0/jama_cli/commands/items.py +340 -0
- jama_cli-0.1.0/jama_cli/commands/migrate.py +1129 -0
- jama_cli-0.1.0/jama_cli/commands/picklists.py +97 -0
- jama_cli-0.1.0/jama_cli/commands/projects.py +75 -0
- jama_cli-0.1.0/jama_cli/commands/relationships.py +203 -0
- jama_cli-0.1.0/jama_cli/commands/search.py +289 -0
- jama_cli-0.1.0/jama_cli/commands/serve.py +422 -0
- jama_cli-0.1.0/jama_cli/commands/tags.py +76 -0
- jama_cli-0.1.0/jama_cli/commands/tests.py +69 -0
- jama_cli-0.1.0/jama_cli/commands/trace.py +438 -0
- jama_cli-0.1.0/jama_cli/commands/types.py +74 -0
- jama_cli-0.1.0/jama_cli/commands/users.py +73 -0
- jama_cli-0.1.0/jama_cli/config.py +189 -0
- jama_cli-0.1.0/jama_cli/core/__init__.py +6 -0
- jama_cli-0.1.0/jama_cli/core/client.py +948 -0
- jama_cli-0.1.0/jama_cli/main.py +164 -0
- jama_cli-0.1.0/jama_cli/models/__init__.py +129 -0
- jama_cli-0.1.0/jama_cli/output/__init__.py +28 -0
- jama_cli-0.1.0/jama_cli/output/console.py +49 -0
- jama_cli-0.1.0/jama_cli/output/formatters.py +188 -0
- jama_cli-0.1.0/jama_cli/py.typed +0 -0
- jama_cli-0.1.0/jama_mcp_server/__init__.py +13 -0
- jama_cli-0.1.0/jama_mcp_server/api/__init__.py +7 -0
- jama_cli-0.1.0/jama_mcp_server/api/client.py +261 -0
- jama_cli-0.1.0/jama_mcp_server/config.py +184 -0
- jama_cli-0.1.0/jama_mcp_server/core/__init__.py +7 -0
- jama_cli-0.1.0/jama_mcp_server/core/server.py +1283 -0
- jama_cli-0.1.0/jama_mcp_server/core/stdio_server.py +488 -0
- jama_cli-0.1.0/jama_mcp_server/models/__init__.py +197 -0
- jama_cli-0.1.0/pyproject.toml +153 -0
jama_cli-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Christian Nennemann
|
|
4
|
+
|
|
5
|
+
DISCLAIMER: This is an unofficial community project and is not associated with,
|
|
6
|
+
endorsed by, or affiliated with Jama Software in any way. This project is maintained
|
|
7
|
+
by community contributors and is not an official product of Jama Software.
|
|
8
|
+
|
|
9
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
10
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
11
|
+
in the Software without restriction, including without limitation the rights
|
|
12
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
13
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
14
|
+
furnished to do so, subject to the following conditions:
|
|
15
|
+
|
|
16
|
+
The above copyright notice and this permission notice shall be included in all
|
|
17
|
+
copies or substantial portions of the Software.
|
|
18
|
+
|
|
19
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
20
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
21
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
22
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
23
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
24
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
25
|
+
SOFTWARE.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
This project incorporates the following third-party open source software:
|
|
30
|
+
|
|
31
|
+
1. aiohttp - MIT License - Copyright (c) 2013-2021 aio-libs collaboration
|
|
32
|
+
https://github.com/aio-libs/aiohttp/blob/master/LICENSE.txt
|
|
33
|
+
|
|
34
|
+
2. py-jama-rest-client - MIT License - Copyright (c) 2017 Jarrod Wubbel
|
|
35
|
+
https://github.com/jamalshahverdiev/py-jama-rest-client/blob/master/LICENSE
|
|
36
|
+
|
|
37
|
+
3. pydantic - MIT License - Copyright (c) 2017-present, Samuel Colvin and other contributors
|
|
38
|
+
https://github.com/pydantic/pydantic/blob/main/LICENSE
|
|
39
|
+
|
|
40
|
+
4. loguru - MIT License - Copyright (c) 2017-present, Delgan
|
|
41
|
+
https://github.com/Delgan/loguru/blob/master/LICENSE
|
|
42
|
+
|
|
43
|
+
5. typer - MIT License - Copyright (c) 2020 Sebastián Ramírez
|
|
44
|
+
https://github.com/tiangolo/typer/blob/master/LICENSE
|
|
45
|
+
|
|
46
|
+
6. asyncio - PSF License - Copyright (c) Python Software Foundation
|
|
47
|
+
Part of the Python standard library
|
|
48
|
+
|
|
49
|
+
7. jsonschema - MIT License - Copyright (c) 2013 Julian Berman
|
|
50
|
+
https://github.com/python-jsonschema/jsonschema/blob/main/COPYING
|
|
51
|
+
|
|
52
|
+
8. python-dotenv - BSD 3-Clause License - Copyright (c) 2014, Saurabh Kumar
|
|
53
|
+
https://github.com/theskumar/python-dotenv/blob/master/LICENSE
|
|
54
|
+
|
|
55
|
+
All third-party libraries used in this project are compatible with the MIT License.
|
jama_cli-0.1.0/NOTICE
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
NOTICES AND INFORMATION
|
|
2
|
+
Do Not Translate or Localize
|
|
3
|
+
|
|
4
|
+
DISCLAIMER: This is an unofficial community project and is not associated with, endorsed by, or affiliated with Jama Software in any way.
|
|
5
|
+
|
|
6
|
+
This software incorporates material from third parties. A list of these third-party components and their licenses follows.
|
|
7
|
+
|
|
8
|
+
---------------------------------------------
|
|
9
|
+
1. aiohttp (https://github.com/aio-libs/aiohttp)
|
|
10
|
+
---------------------------------------------
|
|
11
|
+
|
|
12
|
+
Copyright (c) 2013-2021 aio-libs collaboration
|
|
13
|
+
|
|
14
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
15
|
+
|
|
16
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
17
|
+
|
|
18
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
19
|
+
|
|
20
|
+
---------------------------------------------
|
|
21
|
+
2. py-jama-rest-client (https://github.com/jamalshahverdiev/py-jama-rest-client)
|
|
22
|
+
---------------------------------------------
|
|
23
|
+
|
|
24
|
+
MIT License
|
|
25
|
+
|
|
26
|
+
Copyright (c) 2017 Jarrod Wubbel
|
|
27
|
+
|
|
28
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
29
|
+
|
|
30
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
31
|
+
|
|
32
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
33
|
+
|
|
34
|
+
---------------------------------------------
|
|
35
|
+
3. pydantic (https://github.com/pydantic/pydantic)
|
|
36
|
+
---------------------------------------------
|
|
37
|
+
|
|
38
|
+
MIT License
|
|
39
|
+
|
|
40
|
+
Copyright (c) 2017-present, Samuel Colvin and other contributors
|
|
41
|
+
|
|
42
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
43
|
+
|
|
44
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
45
|
+
|
|
46
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
47
|
+
|
|
48
|
+
---------------------------------------------
|
|
49
|
+
4. loguru (https://github.com/Delgan/loguru)
|
|
50
|
+
---------------------------------------------
|
|
51
|
+
|
|
52
|
+
MIT License
|
|
53
|
+
|
|
54
|
+
Copyright (c) 2017-present, Delgan
|
|
55
|
+
|
|
56
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
57
|
+
|
|
58
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
59
|
+
|
|
60
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
61
|
+
|
|
62
|
+
---------------------------------------------
|
|
63
|
+
5. typer (https://github.com/tiangolo/typer)
|
|
64
|
+
---------------------------------------------
|
|
65
|
+
|
|
66
|
+
MIT License
|
|
67
|
+
|
|
68
|
+
Copyright (c) 2020 Sebastián Ramírez
|
|
69
|
+
|
|
70
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
71
|
+
|
|
72
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
73
|
+
|
|
74
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
75
|
+
|
|
76
|
+
---------------------------------------------
|
|
77
|
+
6. asyncio (Python standard library)
|
|
78
|
+
---------------------------------------------
|
|
79
|
+
|
|
80
|
+
Python Software Foundation License (PSF License)
|
|
81
|
+
This is part of the Python standard library. For more information, see:
|
|
82
|
+
https://docs.python.org/3/license.html
|
|
83
|
+
|
|
84
|
+
---------------------------------------------
|
|
85
|
+
7. jsonschema (https://github.com/python-jsonschema/jsonschema)
|
|
86
|
+
---------------------------------------------
|
|
87
|
+
|
|
88
|
+
MIT License
|
|
89
|
+
|
|
90
|
+
Copyright (c) 2013 Julian Berman
|
|
91
|
+
|
|
92
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
93
|
+
|
|
94
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
95
|
+
|
|
96
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
97
|
+
|
|
98
|
+
---------------------------------------------
|
|
99
|
+
8. python-dotenv (https://github.com/theskumar/python-dotenv)
|
|
100
|
+
---------------------------------------------
|
|
101
|
+
|
|
102
|
+
BSD 3-Clause License
|
|
103
|
+
|
|
104
|
+
Copyright (c) 2014, Saurabh Kumar, Michael Schlottke-Lakemper
|
|
105
|
+
|
|
106
|
+
All rights reserved.
|
|
107
|
+
|
|
108
|
+
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
|
109
|
+
|
|
110
|
+
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
|
111
|
+
|
|
112
|
+
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
|
113
|
+
|
|
114
|
+
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
|
115
|
+
|
|
116
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
jama_cli-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,526 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: jama-cli
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Command-line interface for Jama requirements management with MCP server support
|
|
5
|
+
License: MIT
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
License-File: NOTICE
|
|
8
|
+
Keywords: jama,cli,mcp,model-context-protocol,requirements-management,api
|
|
9
|
+
Author: Christian Nennemann
|
|
10
|
+
Author-email: 0lt7axgtr@mozmail.com
|
|
11
|
+
Requires-Python: >=3.10,<4.0
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Framework :: AsyncIO
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
24
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
25
|
+
Classifier: Typing :: Typed
|
|
26
|
+
Requires-Dist: aiohttp (>=3.9.0,<4.0.0)
|
|
27
|
+
Requires-Dist: aiohttp-swagger3 (>=0.8.0,<0.9.0)
|
|
28
|
+
Requires-Dist: jsonschema (>=4.19.0,<5.0.0)
|
|
29
|
+
Requires-Dist: loguru (>=0.7.0,<0.8.0)
|
|
30
|
+
Requires-Dist: mcp (>=1.0.0,<2.0.0)
|
|
31
|
+
Requires-Dist: py-jama-rest-client (>=1.17.0,<2.0.0)
|
|
32
|
+
Requires-Dist: pydantic (>=2.0.0,<3.0.0)
|
|
33
|
+
Requires-Dist: python-dotenv (>=1.0.0,<2.0.0)
|
|
34
|
+
Requires-Dist: pyyaml (>=6.0.0,<7.0.0)
|
|
35
|
+
Requires-Dist: rich (>=13.0.0,<14.0.0)
|
|
36
|
+
Requires-Dist: typer[all] (>=0.12.0)
|
|
37
|
+
Project-URL: Repository, https://github.com/XORwell/jama-cli
|
|
38
|
+
Description-Content-Type: text/markdown
|
|
39
|
+
|
|
40
|
+
# Jama CLI
|
|
41
|
+
|
|
42
|
+
[](https://github.com/XORwell/jama-cli/actions/workflows/ci.yml)
|
|
43
|
+
[](https://pypi.org/project/jama-cli/)
|
|
44
|
+
[](https://pypi.org/project/jama-cli/)
|
|
45
|
+
[](https://github.com/XORwell/jama-cli/pkgs/container/jama-cli)
|
|
46
|
+
|
|
47
|
+
A powerful command-line interface for Jama requirements management, with MCP (Model Context Protocol) server support for AI assistants.
|
|
48
|
+
|
|
49
|
+
> **DISCLAIMER**: This is an unofficial community project and is not associated with, endorsed by, or affiliated with Jama Software in any way.
|
|
50
|
+
|
|
51
|
+
## Quick Start
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Install
|
|
55
|
+
pip install jama-cli
|
|
56
|
+
|
|
57
|
+
# Configure
|
|
58
|
+
jama config init
|
|
59
|
+
|
|
60
|
+
# Use
|
|
61
|
+
jama projects list
|
|
62
|
+
jama items list 123
|
|
63
|
+
jama items get 456 --output json
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Features
|
|
67
|
+
|
|
68
|
+
### CLI Commands
|
|
69
|
+
- **Projects**: List, view, and search projects
|
|
70
|
+
- **Items**: Full CRUD operations (create, read, update, delete)
|
|
71
|
+
- **Relationships**: Manage upstream/downstream traceability
|
|
72
|
+
- **Traceability**: Coverage analysis, trace matrix, trace trees
|
|
73
|
+
- **Baselines**: Compare baselines, view versioned items
|
|
74
|
+
- **History**: View item version history, compare versions
|
|
75
|
+
- **Search**: Full-text and regex search across projects
|
|
76
|
+
- **Diff**: Compare projects, count differences
|
|
77
|
+
- **Migrate**: Export, import, clone, copy data
|
|
78
|
+
- **Types**: View item types and their fields
|
|
79
|
+
- **Config**: Multi-profile configuration management
|
|
80
|
+
|
|
81
|
+
> **See [EXAMPLES.md](https://github.com/XORwell/jama-cli/blob/main/EXAMPLES.md) for comprehensive usage examples**
|
|
82
|
+
|
|
83
|
+
### MCP Server
|
|
84
|
+
- **stdio mode**: Native integration with Claude Desktop, Cline, VS Code
|
|
85
|
+
- **HTTP mode**: REST API with OpenAPI documentation
|
|
86
|
+
- **70 Jama operations**: Complete API coverage
|
|
87
|
+
|
|
88
|
+
### Output Formats
|
|
89
|
+
```bash
|
|
90
|
+
jama items list 123 # Table (default)
|
|
91
|
+
jama items list 123 --output json # JSON
|
|
92
|
+
jama items list 123 --output csv # CSV
|
|
93
|
+
jama items list 123 --output yaml # YAML
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Installation
|
|
97
|
+
|
|
98
|
+
### pip (recommended)
|
|
99
|
+
```bash
|
|
100
|
+
pip install jama-cli
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### pipx (isolated)
|
|
104
|
+
```bash
|
|
105
|
+
pipx install jama-cli
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### From source
|
|
109
|
+
```bash
|
|
110
|
+
git clone https://github.com/XORwell/jama-cli.git
|
|
111
|
+
cd jama-cli
|
|
112
|
+
pip install -e .
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Configuration
|
|
116
|
+
|
|
117
|
+
### Interactive Setup
|
|
118
|
+
```bash
|
|
119
|
+
jama config init
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Configuration File
|
|
123
|
+
Location: `~/.jama/config.yml`
|
|
124
|
+
|
|
125
|
+
```yaml
|
|
126
|
+
default_profile: production
|
|
127
|
+
|
|
128
|
+
profiles:
|
|
129
|
+
production:
|
|
130
|
+
url: https://company.jamacloud.com
|
|
131
|
+
auth_type: api_key
|
|
132
|
+
api_key: ${JAMA_API_KEY} # Environment variable
|
|
133
|
+
|
|
134
|
+
staging:
|
|
135
|
+
url: https://staging.jamacloud.com
|
|
136
|
+
auth_type: oauth
|
|
137
|
+
client_id: ${JAMA_CLIENT_ID}
|
|
138
|
+
client_secret: ${JAMA_CLIENT_SECRET}
|
|
139
|
+
|
|
140
|
+
defaults:
|
|
141
|
+
output: table
|
|
142
|
+
limit: 50
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Environment Variables
|
|
146
|
+
```bash
|
|
147
|
+
export JAMA_URL=https://company.jamacloud.com
|
|
148
|
+
export JAMA_API_KEY=your-api-key
|
|
149
|
+
export JAMA_PROFILE=production # Optional: override default profile
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## CLI Commands
|
|
153
|
+
|
|
154
|
+
### Projects
|
|
155
|
+
```bash
|
|
156
|
+
jama projects list # List all projects
|
|
157
|
+
jama projects get 123 # Get project details
|
|
158
|
+
jama projects list --output json # JSON output
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Items
|
|
162
|
+
```bash
|
|
163
|
+
jama items list 123 # List items in project 123
|
|
164
|
+
jama items get 456 # Get item details
|
|
165
|
+
jama items children 456 # Get child items
|
|
166
|
+
|
|
167
|
+
# Create item
|
|
168
|
+
jama items create 123 --type 45 --name "New Requirement"
|
|
169
|
+
|
|
170
|
+
# Update item
|
|
171
|
+
jama items update 456 --name "Updated Name"
|
|
172
|
+
jama items update 456 --field status=Approved
|
|
173
|
+
|
|
174
|
+
# Delete item
|
|
175
|
+
jama items delete 456
|
|
176
|
+
jama items delete 456 --force # Skip confirmation
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Relationships
|
|
180
|
+
```bash
|
|
181
|
+
jama relationships list 456 # All relationships for item
|
|
182
|
+
jama relationships upstream 456 # Upstream items (traced from)
|
|
183
|
+
jama relationships downstream 456 # Downstream items (traced to)
|
|
184
|
+
|
|
185
|
+
# Create relationship
|
|
186
|
+
jama relationships create --from 456 --to 789
|
|
187
|
+
|
|
188
|
+
# Delete relationship
|
|
189
|
+
jama relationships delete 123
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Item Types
|
|
193
|
+
```bash
|
|
194
|
+
jama types list # List all item types
|
|
195
|
+
jama types get 45 # Get type details
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Configuration
|
|
199
|
+
```bash
|
|
200
|
+
jama config init # Interactive setup
|
|
201
|
+
jama config list # List profiles
|
|
202
|
+
jama config show # Show current profile
|
|
203
|
+
jama config add prod --url https://... --api-key xxx
|
|
204
|
+
jama config remove staging
|
|
205
|
+
jama config set-default production
|
|
206
|
+
jama config cache # Show cache stats
|
|
207
|
+
jama config cache --clear # Clear cache
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Search
|
|
211
|
+
```bash
|
|
212
|
+
jama search items "login" # Search all projects
|
|
213
|
+
jama search items "login" --project 123 # Search in specific project
|
|
214
|
+
jama search items "REQ-" --field documentKey # Search by document key
|
|
215
|
+
jama search items "^REQ-\\d+" --regex # Regex search
|
|
216
|
+
jama search items "test" --type 45 # Search specific item type
|
|
217
|
+
jama search fields 123 # List searchable fields
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Diff (Compare Projects)
|
|
221
|
+
```bash
|
|
222
|
+
jama diff projects 123 456 # Compare two projects
|
|
223
|
+
jama diff projects 123 456 --from dev --to prod # Compare across instances
|
|
224
|
+
jama diff projects 123 456 --type 45 # Compare specific item type
|
|
225
|
+
jama diff projects 123 456 --key name # Match by name instead of key
|
|
226
|
+
jama diff count 123 456 # Quick count comparison
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Traceability Analysis
|
|
230
|
+
```bash
|
|
231
|
+
jama trace matrix 1172 # Traceability matrix
|
|
232
|
+
jama trace matrix 1172 -s 45 -t 67 # Requirements → Test Cases
|
|
233
|
+
jama trace matrix 1172 --untraced # Show coverage gaps
|
|
234
|
+
jama trace coverage 1172 # Coverage % by item type
|
|
235
|
+
jama trace tree 12345 # Trace tree for item
|
|
236
|
+
jama trace tree 12345 --direction upstream # Upstream only
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Baselines
|
|
240
|
+
```bash
|
|
241
|
+
jama baseline list 1172 # List baselines
|
|
242
|
+
jama baseline items 100 # Items in baseline
|
|
243
|
+
jama baseline diff 100 101 # Compare baselines
|
|
244
|
+
# Shows: +Added, ~Modified, -Removed
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Version History
|
|
248
|
+
```bash
|
|
249
|
+
jama history list 12345 # Version history
|
|
250
|
+
jama history get 12345 3 # Get version 3
|
|
251
|
+
jama history diff 12345 1 3 # Compare versions
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Data Migration
|
|
255
|
+
```bash
|
|
256
|
+
# Export items to JSON (fast by default)
|
|
257
|
+
jama migrate export 123 # Export all items
|
|
258
|
+
jama migrate export 123 --max 100 # Export first 100 items (fast)
|
|
259
|
+
jama migrate export 123 --parent 456 --max 50 # Export subtree, limit 50
|
|
260
|
+
jama migrate export 123 --type 45 # Export only type 45
|
|
261
|
+
jama migrate export 123 --relationships # Include relationships (slower)
|
|
262
|
+
|
|
263
|
+
# Import from JSON
|
|
264
|
+
jama migrate import backup.json --project 456 # Import to project 456
|
|
265
|
+
jama migrate import backup.json -p 456 --dry-run # Preview import
|
|
266
|
+
|
|
267
|
+
# Clone within same instance
|
|
268
|
+
jama migrate clone 123 456 # Clone project 123 to 456
|
|
269
|
+
jama migrate clone 123 456 --source-parent 789 # Clone children of item
|
|
270
|
+
|
|
271
|
+
# Copy between instances (requires two profiles)
|
|
272
|
+
jama migrate copy 123 456 --from staging --to production
|
|
273
|
+
|
|
274
|
+
# Inspect export file
|
|
275
|
+
jama migrate info backup.json
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## MCP Server
|
|
279
|
+
|
|
280
|
+
### For Claude Desktop / Cline
|
|
281
|
+
|
|
282
|
+
Add to your MCP configuration:
|
|
283
|
+
|
|
284
|
+
```json
|
|
285
|
+
{
|
|
286
|
+
"mcpServers": {
|
|
287
|
+
"jama": {
|
|
288
|
+
"command": "jama",
|
|
289
|
+
"args": ["serve", "--stdio"]
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### HTTP Server
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
# Start HTTP server
|
|
299
|
+
jama serve # Default: localhost:8000
|
|
300
|
+
jama serve --port 9000 # Custom port
|
|
301
|
+
jama serve --api-key secret # With authentication
|
|
302
|
+
|
|
303
|
+
# Access
|
|
304
|
+
curl http://localhost:8000/health
|
|
305
|
+
open http://localhost:8000/api/docs # Swagger UI
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### Available Operations
|
|
309
|
+
|
|
310
|
+
The MCP server exposes 70 Jama API operations:
|
|
311
|
+
|
|
312
|
+
| Category | Operations |
|
|
313
|
+
|----------|------------|
|
|
314
|
+
| Projects | get_projects, get_project |
|
|
315
|
+
| Items | get_items, get_item, create_item, update_item, delete_item |
|
|
316
|
+
| Relationships | get_relationships, create_relationship, delete_relationship |
|
|
317
|
+
| Types | get_item_types, get_item_type |
|
|
318
|
+
| Pick Lists | get_pick_lists, get_pick_list, get_pick_list_options |
|
|
319
|
+
| Tags | get_tags, get_tagged_items |
|
|
320
|
+
| Tests | get_test_plans, get_test_cycles, get_test_runs |
|
|
321
|
+
| Attachments | get_attachments, upload_attachment |
|
|
322
|
+
| ... | See full list in API documentation |
|
|
323
|
+
|
|
324
|
+
## Global Options
|
|
325
|
+
|
|
326
|
+
```bash
|
|
327
|
+
jama [OPTIONS] COMMAND [ARGS]
|
|
328
|
+
|
|
329
|
+
Options:
|
|
330
|
+
-p, --profile TEXT Profile name from config
|
|
331
|
+
-o, --output FORMAT Output: table, json, csv, yaml
|
|
332
|
+
-v, --verbose Increase verbosity (-v, -vv, -vvv)
|
|
333
|
+
-q, --quiet Suppress non-error output
|
|
334
|
+
--version Show version
|
|
335
|
+
--help Show help
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
## Examples
|
|
339
|
+
|
|
340
|
+
### List requirements and export to CSV
|
|
341
|
+
```bash
|
|
342
|
+
jama items list 123 --type 45 --output csv > requirements.csv
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Get item as JSON for scripting
|
|
346
|
+
```bash
|
|
347
|
+
ITEM=$(jama items get 456 --output json)
|
|
348
|
+
echo $ITEM | jq '.fields.name'
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
### Create item from script
|
|
352
|
+
```bash
|
|
353
|
+
jama items create 123 \
|
|
354
|
+
--type 45 \
|
|
355
|
+
--name "REQ-001: User Authentication" \
|
|
356
|
+
--description "Users shall authenticate with SSO" \
|
|
357
|
+
--field priority=High \
|
|
358
|
+
--field status=Draft
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
### Trace upstream requirements
|
|
362
|
+
```bash
|
|
363
|
+
jama relationships upstream 456 --output table
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
### Use different profile
|
|
367
|
+
```bash
|
|
368
|
+
jama -p staging items list 123
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
## Docker
|
|
372
|
+
|
|
373
|
+
A pre-built Docker image is available for running the Jama MCP server without installing Python.
|
|
374
|
+
|
|
375
|
+
```bash
|
|
376
|
+
docker pull ghcr.io/xorwell/jama-cli
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
### Quick Start
|
|
380
|
+
|
|
381
|
+
```bash
|
|
382
|
+
# Using environment variables
|
|
383
|
+
docker run -p 8000:8000 \
|
|
384
|
+
-e JAMA_URL=https://company.jamacloud.com \
|
|
385
|
+
-e JAMA_API_KEY=your-api-key \
|
|
386
|
+
ghcr.io/xorwell/jama-cli
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
The server starts on port 8000 with health checks, rate limiting, and Swagger UI at `/api/docs`.
|
|
390
|
+
|
|
391
|
+
### Using a Config File
|
|
392
|
+
|
|
393
|
+
Mount your existing `~/.jama/config.yml` into the container:
|
|
394
|
+
|
|
395
|
+
```bash
|
|
396
|
+
docker run -p 8000:8000 \
|
|
397
|
+
-v ~/.jama/config.yml:/home/appuser/.jama/config.yml:ro \
|
|
398
|
+
ghcr.io/xorwell/jama-cli
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
To use a specific profile from your config:
|
|
402
|
+
|
|
403
|
+
```bash
|
|
404
|
+
docker run -p 8000:8000 \
|
|
405
|
+
-v ~/.jama/config.yml:/home/appuser/.jama/config.yml:ro \
|
|
406
|
+
ghcr.io/xorwell/jama-cli \
|
|
407
|
+
jama serve --host 0.0.0.0 --port 8000 --profile production
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### Authentication Methods
|
|
411
|
+
|
|
412
|
+
```bash
|
|
413
|
+
# API Key
|
|
414
|
+
docker run -p 8000:8000 \
|
|
415
|
+
-e JAMA_URL=https://company.jamacloud.com \
|
|
416
|
+
-e JAMA_API_KEY=your-api-key \
|
|
417
|
+
ghcr.io/xorwell/jama-cli
|
|
418
|
+
|
|
419
|
+
# OAuth2 Client Credentials
|
|
420
|
+
docker run -p 8000:8000 \
|
|
421
|
+
-e JAMA_URL=https://company.jamacloud.com \
|
|
422
|
+
-e JAMA_CLIENT_ID=your-client-id \
|
|
423
|
+
-e JAMA_CLIENT_SECRET=your-client-secret \
|
|
424
|
+
ghcr.io/xorwell/jama-cli
|
|
425
|
+
|
|
426
|
+
# Username/Password
|
|
427
|
+
docker run -p 8000:8000 \
|
|
428
|
+
-e JAMA_URL=https://company.jamacloud.com \
|
|
429
|
+
-e JAMA_USERNAME=your-username \
|
|
430
|
+
-e JAMA_PASSWORD=your-password \
|
|
431
|
+
ghcr.io/xorwell/jama-cli
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
### Server Authentication
|
|
435
|
+
|
|
436
|
+
Protect the MCP server with an API key so only authorized clients can use it:
|
|
437
|
+
|
|
438
|
+
```bash
|
|
439
|
+
docker run -p 8000:8000 \
|
|
440
|
+
-e JAMA_URL=https://company.jamacloud.com \
|
|
441
|
+
-e JAMA_API_KEY=your-jama-key \
|
|
442
|
+
-e MCP_API_KEY=my-server-secret \
|
|
443
|
+
ghcr.io/xorwell/jama-cli
|
|
444
|
+
|
|
445
|
+
# Clients must include: Authorization: Bearer my-server-secret
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
### Docker Compose
|
|
449
|
+
|
|
450
|
+
```yaml
|
|
451
|
+
services:
|
|
452
|
+
jama-mcp:
|
|
453
|
+
image: ghcr.io/xorwell/jama-cli
|
|
454
|
+
ports:
|
|
455
|
+
- "8000:8000"
|
|
456
|
+
environment:
|
|
457
|
+
- JAMA_URL=https://company.jamacloud.com
|
|
458
|
+
- JAMA_API_KEY=${JAMA_API_KEY}
|
|
459
|
+
# Or mount config:
|
|
460
|
+
# volumes:
|
|
461
|
+
# - ~/.jama/config.yml:/home/appuser/.jama/config.yml:ro
|
|
462
|
+
restart: unless-stopped
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
### Using the CLI via Docker
|
|
466
|
+
|
|
467
|
+
You can also use the Docker image to run CLI commands:
|
|
468
|
+
|
|
469
|
+
```bash
|
|
470
|
+
docker run --rm \
|
|
471
|
+
-e JAMA_URL=https://company.jamacloud.com \
|
|
472
|
+
-e JAMA_API_KEY=your-api-key \
|
|
473
|
+
ghcr.io/xorwell/jama-cli \
|
|
474
|
+
jama projects list
|
|
475
|
+
|
|
476
|
+
docker run --rm \
|
|
477
|
+
-e JAMA_URL=https://company.jamacloud.com \
|
|
478
|
+
-e JAMA_API_KEY=your-api-key \
|
|
479
|
+
ghcr.io/xorwell/jama-cli \
|
|
480
|
+
jama items list 123 --output json
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
### Building Locally
|
|
484
|
+
|
|
485
|
+
```bash
|
|
486
|
+
docker build -t jama-cli .
|
|
487
|
+
docker run -p 8000:8000 -e JAMA_URL=... -e JAMA_API_KEY=... jama-cli
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
> **See [DOCKER.md](https://github.com/XORwell/jama-cli/blob/main/DOCKER.md) for full Docker documentation** including endpoints, image details, Kubernetes probes, and more.
|
|
491
|
+
|
|
492
|
+
## Development
|
|
493
|
+
|
|
494
|
+
```bash
|
|
495
|
+
# Clone
|
|
496
|
+
git clone https://github.com/XORwell/jama-cli.git
|
|
497
|
+
cd jama-cli
|
|
498
|
+
|
|
499
|
+
# Install with dev dependencies
|
|
500
|
+
poetry install
|
|
501
|
+
|
|
502
|
+
# Run tests
|
|
503
|
+
poetry run pytest
|
|
504
|
+
|
|
505
|
+
# Lint
|
|
506
|
+
poetry run ruff check .
|
|
507
|
+
poetry run black --check .
|
|
508
|
+
|
|
509
|
+
# Type check
|
|
510
|
+
poetry run mypy jama_cli jama_mcp_server
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
## License
|
|
514
|
+
|
|
515
|
+
MIT License - see [LICENSE](https://github.com/XORwell/jama-cli/blob/main/LICENSE)
|
|
516
|
+
|
|
517
|
+
## Contributing
|
|
518
|
+
|
|
519
|
+
Contributions welcome! Please read [CONTRIBUTING.md](https://github.com/XORwell/jama-cli/blob/main/CONTRIBUTING.md).
|
|
520
|
+
|
|
521
|
+
## Related
|
|
522
|
+
|
|
523
|
+
- [Jama REST API Documentation](https://dev.jamasoftware.com/api/)
|
|
524
|
+
- [Model Context Protocol](https://modelcontextprotocol.io/)
|
|
525
|
+
- [py-jama-rest-client](https://github.com/jamasoftware-ps/py-jama-rest-client)
|
|
526
|
+
|