@qase/mcp-server 1.1.7 → 2.0.0

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.
Files changed (284) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +75 -551
  3. package/build/auth/client-context.d.ts +12 -0
  4. package/build/auth/client-context.d.ts.map +1 -0
  5. package/build/auth/client-context.js +12 -0
  6. package/build/auth/client-context.js.map +1 -0
  7. package/build/auth/jwks-verifier.d.ts +15 -0
  8. package/build/auth/jwks-verifier.d.ts.map +1 -0
  9. package/build/auth/jwks-verifier.js +31 -0
  10. package/build/auth/jwks-verifier.js.map +1 -0
  11. package/build/auth/mcp-guard.d.ts +15 -0
  12. package/build/auth/mcp-guard.d.ts.map +1 -0
  13. package/build/auth/mcp-guard.js +44 -0
  14. package/build/auth/mcp-guard.js.map +1 -0
  15. package/build/auth/oauth-config.d.ts +40 -0
  16. package/build/auth/oauth-config.d.ts.map +1 -0
  17. package/build/auth/oauth-config.js +34 -0
  18. package/build/auth/oauth-config.js.map +1 -0
  19. package/build/auth/proxy-provider.d.ts +31 -0
  20. package/build/auth/proxy-provider.d.ts.map +1 -0
  21. package/build/auth/proxy-provider.js +87 -0
  22. package/build/auth/proxy-provider.js.map +1 -0
  23. package/build/auth/token-type.d.ts +7 -0
  24. package/build/auth/token-type.d.ts.map +1 -0
  25. package/build/auth/token-type.js +10 -0
  26. package/build/auth/token-type.js.map +1 -0
  27. package/build/cache/circuit-breaker.d.ts +33 -0
  28. package/build/cache/circuit-breaker.d.ts.map +1 -0
  29. package/build/cache/circuit-breaker.js +68 -0
  30. package/build/cache/circuit-breaker.js.map +1 -0
  31. package/build/cache/index.d.ts +24 -0
  32. package/build/cache/index.d.ts.map +1 -0
  33. package/build/cache/index.js +86 -0
  34. package/build/cache/index.js.map +1 -0
  35. package/build/cache/keys.d.ts +25 -0
  36. package/build/cache/keys.d.ts.map +1 -0
  37. package/build/cache/keys.js +36 -0
  38. package/build/cache/keys.js.map +1 -0
  39. package/build/cache/layered.d.ts +31 -0
  40. package/build/cache/layered.d.ts.map +1 -0
  41. package/build/cache/layered.js +88 -0
  42. package/build/cache/layered.js.map +1 -0
  43. package/build/cache/memory.d.ts +32 -0
  44. package/build/cache/memory.d.ts.map +1 -0
  45. package/build/cache/memory.js +108 -0
  46. package/build/cache/memory.js.map +1 -0
  47. package/build/cache/metrics.d.ts +31 -0
  48. package/build/cache/metrics.d.ts.map +1 -0
  49. package/build/cache/metrics.js +95 -0
  50. package/build/cache/metrics.js.map +1 -0
  51. package/build/cache/prom-format.d.ts +7 -0
  52. package/build/cache/prom-format.d.ts.map +1 -0
  53. package/build/cache/prom-format.js +16 -0
  54. package/build/cache/prom-format.js.map +1 -0
  55. package/build/cache/redis-bus.d.ts +29 -0
  56. package/build/cache/redis-bus.d.ts.map +1 -0
  57. package/build/cache/redis-bus.js +50 -0
  58. package/build/cache/redis-bus.js.map +1 -0
  59. package/build/cache/redis.d.ts +32 -0
  60. package/build/cache/redis.d.ts.map +1 -0
  61. package/build/cache/redis.js +89 -0
  62. package/build/cache/redis.js.map +1 -0
  63. package/build/cache/types.d.ts +38 -0
  64. package/build/cache/types.d.ts.map +1 -0
  65. package/build/cache/types.js +2 -0
  66. package/build/cache/types.js.map +1 -0
  67. package/build/client/index.d.ts +10 -3
  68. package/build/client/index.d.ts.map +1 -1
  69. package/build/client/index.js +75 -50
  70. package/build/client/index.js.map +1 -1
  71. package/build/http/agent.d.ts +16 -0
  72. package/build/http/agent.d.ts.map +1 -0
  73. package/build/http/agent.js +16 -0
  74. package/build/http/agent.js.map +1 -0
  75. package/build/http/dedupe.d.ts +14 -0
  76. package/build/http/dedupe.d.ts.map +1 -0
  77. package/build/http/dedupe.js +69 -0
  78. package/build/http/dedupe.js.map +1 -0
  79. package/build/http/index.d.ts +6 -0
  80. package/build/http/index.d.ts.map +1 -0
  81. package/build/http/index.js +4 -0
  82. package/build/http/index.js.map +1 -0
  83. package/build/http/retry.d.ts +18 -0
  84. package/build/http/retry.d.ts.map +1 -0
  85. package/build/http/retry.js +52 -0
  86. package/build/http/retry.js.map +1 -0
  87. package/build/index.d.ts +1 -18
  88. package/build/index.d.ts.map +1 -1
  89. package/build/index.js +95 -61
  90. package/build/index.js.map +1 -1
  91. package/build/operations-v2/composites/ci-report.d.ts +2 -0
  92. package/build/operations-v2/composites/ci-report.d.ts.map +1 -0
  93. package/build/operations-v2/composites/ci-report.js +99 -0
  94. package/build/operations-v2/composites/ci-report.js.map +1 -0
  95. package/build/operations-v2/composites/regression-run.d.ts +2 -0
  96. package/build/operations-v2/composites/regression-run.d.ts.map +1 -0
  97. package/build/operations-v2/composites/regression-run.js +81 -0
  98. package/build/operations-v2/composites/regression-run.js.map +1 -0
  99. package/build/operations-v2/composites/triage-defect.d.ts +2 -0
  100. package/build/operations-v2/composites/triage-defect.d.ts.map +1 -0
  101. package/build/operations-v2/composites/triage-defect.js +67 -0
  102. package/build/operations-v2/composites/triage-defect.js.map +1 -0
  103. package/build/operations-v2/escape/api.d.ts +2 -0
  104. package/build/operations-v2/escape/api.d.ts.map +1 -0
  105. package/build/operations-v2/escape/api.js +34 -0
  106. package/build/operations-v2/escape/api.js.map +1 -0
  107. package/build/operations-v2/index.d.ts +19 -0
  108. package/build/operations-v2/index.d.ts.map +1 -0
  109. package/build/operations-v2/index.js +25 -0
  110. package/build/operations-v2/index.js.map +1 -0
  111. package/build/operations-v2/meta/discover.d.ts +9 -0
  112. package/build/operations-v2/meta/discover.d.ts.map +1 -0
  113. package/build/operations-v2/meta/discover.js +76 -0
  114. package/build/operations-v2/meta/discover.js.map +1 -0
  115. package/build/{operations/search.d.ts → operations-v2/qql/index.d.ts} +1 -1
  116. package/build/operations-v2/qql/index.d.ts.map +1 -0
  117. package/build/{operations/search.js → operations-v2/qql/index.js} +34 -9
  118. package/build/operations-v2/qql/index.js.map +1 -0
  119. package/build/operations-v2/read/get.d.ts +2 -0
  120. package/build/operations-v2/read/get.d.ts.map +1 -0
  121. package/build/operations-v2/read/get.js +91 -0
  122. package/build/operations-v2/read/get.js.map +1 -0
  123. package/build/operations-v2/read/project-context.d.ts +2 -0
  124. package/build/operations-v2/read/project-context.d.ts.map +1 -0
  125. package/build/operations-v2/read/project-context.js +102 -0
  126. package/build/operations-v2/read/project-context.js.map +1 -0
  127. package/build/operations-v2/write/attachments.d.ts +2 -0
  128. package/build/operations-v2/write/attachments.d.ts.map +1 -0
  129. package/build/operations-v2/write/attachments.js +58 -0
  130. package/build/operations-v2/write/attachments.js.map +1 -0
  131. package/build/operations-v2/write/cases.d.ts +2 -0
  132. package/build/operations-v2/write/cases.d.ts.map +1 -0
  133. package/build/operations-v2/write/cases.js +121 -0
  134. package/build/operations-v2/write/cases.js.map +1 -0
  135. package/build/operations-v2/write/defects.d.ts +2 -0
  136. package/build/operations-v2/write/defects.d.ts.map +1 -0
  137. package/build/operations-v2/write/defects.js +81 -0
  138. package/build/operations-v2/write/defects.js.map +1 -0
  139. package/build/operations-v2/write/environments.d.ts +2 -0
  140. package/build/operations-v2/write/environments.d.ts.map +1 -0
  141. package/build/operations-v2/write/environments.js +56 -0
  142. package/build/operations-v2/write/environments.js.map +1 -0
  143. package/build/operations-v2/write/milestones.d.ts +2 -0
  144. package/build/operations-v2/write/milestones.d.ts.map +1 -0
  145. package/build/operations-v2/write/milestones.js +56 -0
  146. package/build/operations-v2/write/milestones.js.map +1 -0
  147. package/build/operations-v2/write/plans.d.ts +2 -0
  148. package/build/operations-v2/write/plans.d.ts.map +1 -0
  149. package/build/operations-v2/write/plans.js +55 -0
  150. package/build/operations-v2/write/plans.js.map +1 -0
  151. package/build/operations-v2/write/results.d.ts +2 -0
  152. package/build/operations-v2/write/results.d.ts.map +1 -0
  153. package/build/operations-v2/write/results.js +72 -0
  154. package/build/operations-v2/write/results.js.map +1 -0
  155. package/build/operations-v2/write/runs.d.ts +2 -0
  156. package/build/operations-v2/write/runs.d.ts.map +1 -0
  157. package/build/operations-v2/write/runs.js +84 -0
  158. package/build/operations-v2/write/runs.js.map +1 -0
  159. package/build/operations-v2/write/shared-steps.d.ts +2 -0
  160. package/build/operations-v2/write/shared-steps.d.ts.map +1 -0
  161. package/build/operations-v2/write/shared-steps.js +60 -0
  162. package/build/operations-v2/write/shared-steps.js.map +1 -0
  163. package/build/operations-v2/write/suites.d.ts +2 -0
  164. package/build/operations-v2/write/suites.d.ts.map +1 -0
  165. package/build/operations-v2/write/suites.js +63 -0
  166. package/build/operations-v2/write/suites.js.map +1 -0
  167. package/build/prompts/index.d.ts +31 -0
  168. package/build/prompts/index.d.ts.map +1 -0
  169. package/build/prompts/index.js +229 -0
  170. package/build/prompts/index.js.map +1 -0
  171. package/build/transports/sse.d.ts.map +1 -1
  172. package/build/transports/sse.js +6 -0
  173. package/build/transports/sse.js.map +1 -1
  174. package/build/transports/streamableHttp.d.ts +6 -1
  175. package/build/transports/streamableHttp.d.ts.map +1 -1
  176. package/build/transports/streamableHttp.js +128 -16
  177. package/build/transports/streamableHttp.js.map +1 -1
  178. package/build/utils/auth-context.d.ts +8 -0
  179. package/build/utils/auth-context.d.ts.map +1 -1
  180. package/build/utils/auth-context.js +18 -0
  181. package/build/utils/auth-context.js.map +1 -1
  182. package/build/utils/case-enums.d.ts +5 -3
  183. package/build/utils/case-enums.d.ts.map +1 -1
  184. package/build/utils/case-enums.js +78 -59
  185. package/build/utils/case-enums.js.map +1 -1
  186. package/build/utils/output-schemas.d.ts +16 -0
  187. package/build/utils/output-schemas.d.ts.map +1 -0
  188. package/build/utils/output-schemas.js +82 -0
  189. package/build/utils/output-schemas.js.map +1 -0
  190. package/build/utils/registry.d.ts +42 -9
  191. package/build/utils/registry.d.ts.map +1 -1
  192. package/build/utils/registry.js +64 -11
  193. package/build/utils/registry.js.map +1 -1
  194. package/build/utils/response-shape.d.ts +23 -0
  195. package/build/utils/response-shape.d.ts.map +1 -0
  196. package/build/utils/response-shape.js +73 -0
  197. package/build/utils/response-shape.js.map +1 -0
  198. package/build/utils/rich-response.d.ts +58 -0
  199. package/build/utils/rich-response.d.ts.map +1 -0
  200. package/build/utils/rich-response.js +93 -0
  201. package/build/utils/rich-response.js.map +1 -0
  202. package/build/utils/server-context.d.ts +65 -0
  203. package/build/utils/server-context.d.ts.map +1 -0
  204. package/build/utils/server-context.js +67 -0
  205. package/build/utils/server-context.js.map +1 -0
  206. package/build/version.d.ts +1 -1
  207. package/build/version.js +1 -1
  208. package/docs/connect.md +81 -0
  209. package/docs/migration.md +351 -0
  210. package/docs/self-run.md +270 -0
  211. package/docs/tools.md +109 -0
  212. package/docs/troubleshooting.md +144 -0
  213. package/package.json +12 -3
  214. package/server.json +8 -2
  215. package/build/operations/attachments.d.ts +0 -8
  216. package/build/operations/attachments.d.ts.map +0 -1
  217. package/build/operations/attachments.js +0 -146
  218. package/build/operations/attachments.js.map +0 -1
  219. package/build/operations/authors.d.ts +0 -8
  220. package/build/operations/authors.d.ts.map +0 -1
  221. package/build/operations/authors.js +0 -70
  222. package/build/operations/authors.js.map +0 -1
  223. package/build/operations/cases.d.ts +0 -8
  224. package/build/operations/cases.d.ts.map +0 -1
  225. package/build/operations/cases.js +0 -338
  226. package/build/operations/cases.js.map +0 -1
  227. package/build/operations/configurations.d.ts +0 -10
  228. package/build/operations/configurations.d.ts.map +0 -1
  229. package/build/operations/configurations.js +0 -125
  230. package/build/operations/configurations.js.map +0 -1
  231. package/build/operations/custom-fields.d.ts +0 -8
  232. package/build/operations/custom-fields.d.ts.map +0 -1
  233. package/build/operations/custom-fields.js +0 -172
  234. package/build/operations/custom-fields.js.map +0 -1
  235. package/build/operations/defects.d.ts +0 -8
  236. package/build/operations/defects.d.ts.map +0 -1
  237. package/build/operations/defects.js +0 -256
  238. package/build/operations/defects.js.map +0 -1
  239. package/build/operations/environments.d.ts +0 -8
  240. package/build/operations/environments.d.ts.map +0 -1
  241. package/build/operations/environments.js +0 -154
  242. package/build/operations/environments.js.map +0 -1
  243. package/build/operations/milestones.d.ts +0 -8
  244. package/build/operations/milestones.d.ts.map +0 -1
  245. package/build/operations/milestones.js +0 -155
  246. package/build/operations/milestones.js.map +0 -1
  247. package/build/operations/plans.d.ts +0 -8
  248. package/build/operations/plans.d.ts.map +0 -1
  249. package/build/operations/plans.js +0 -158
  250. package/build/operations/plans.js.map +0 -1
  251. package/build/operations/projects.d.ts +0 -8
  252. package/build/operations/projects.d.ts.map +0 -1
  253. package/build/operations/projects.js +0 -192
  254. package/build/operations/projects.js.map +0 -1
  255. package/build/operations/results.d.ts +0 -8
  256. package/build/operations/results.d.ts.map +0 -1
  257. package/build/operations/results.js +0 -214
  258. package/build/operations/results.js.map +0 -1
  259. package/build/operations/runs.d.ts +0 -8
  260. package/build/operations/runs.d.ts.map +0 -1
  261. package/build/operations/runs.js +0 -224
  262. package/build/operations/runs.js.map +0 -1
  263. package/build/operations/search.d.ts.map +0 -1
  264. package/build/operations/search.js.map +0 -1
  265. package/build/operations/shared-parameters.d.ts +0 -10
  266. package/build/operations/shared-parameters.d.ts.map +0 -1
  267. package/build/operations/shared-parameters.js +0 -93
  268. package/build/operations/shared-parameters.js.map +0 -1
  269. package/build/operations/shared-steps.d.ts +0 -8
  270. package/build/operations/shared-steps.d.ts.map +0 -1
  271. package/build/operations/shared-steps.js +0 -160
  272. package/build/operations/shared-steps.js.map +0 -1
  273. package/build/operations/suites.d.ts +0 -8
  274. package/build/operations/suites.d.ts.map +0 -1
  275. package/build/operations/suites.js +0 -169
  276. package/build/operations/suites.js.map +0 -1
  277. package/build/operations/system-fields.d.ts +0 -10
  278. package/build/operations/system-fields.d.ts.map +0 -1
  279. package/build/operations/system-fields.js +0 -47
  280. package/build/operations/system-fields.js.map +0 -1
  281. package/build/operations/users.d.ts +0 -10
  282. package/build/operations/users.d.ts.map +0 -1
  283. package/build/operations/users.js +0 -78
  284. package/build/operations/users.js.map +0 -1
@@ -0,0 +1,270 @@
1
+ # Self-Run Guide (Local / stdio)
2
+
3
+ Run the Qase MCP Server yourself, using your own `QASE_API_TOKEN`. This is the local/stdio path: you install the package (or build from source) and your MCP client launches it as a subprocess.
4
+
5
+ Prefer zero-install? Connect to the Qase-hosted MCP server instead — no local setup, no API token. See [Connect to the hosted Qase MCP](connect.md).
6
+
7
+ ## Prerequisites
8
+
9
+ - Node.js 20+
10
+ - Qase account with API token ([Get your token](https://app.qase.io/user/api/token))
11
+
12
+ ## Installation
13
+
14
+ ### Option 1: Install from NPM (Recommended)
15
+
16
+ ```bash
17
+ npm install -g @qase/mcp-server
18
+ ```
19
+
20
+ ### Option 2: Install from Source (Development)
21
+
22
+ ```bash
23
+ # Clone the repository
24
+ git clone https://github.com/qase-tms/qase-mcp-server.git
25
+ cd qase-mcp-server
26
+
27
+ # Install dependencies
28
+ npm install
29
+
30
+ # Build the server
31
+ npm run build
32
+ ```
33
+
34
+ ## Configuration
35
+
36
+ ### Environment Variables
37
+
38
+ Create a `.env` file or set environment variables:
39
+
40
+ ```bash
41
+ # Required: Your Qase API token
42
+ QASE_API_TOKEN=your_api_token_here
43
+
44
+ # Optional: Custom API domain for enterprise customers
45
+ QASE_API_DOMAIN=api.qase.io
46
+ ```
47
+
48
+ Get your API token from: https://app.qase.io/user/api/token
49
+
50
+ ### Custom Domains (Enterprise)
51
+
52
+ If you're using Qase Enterprise with a custom domain:
53
+
54
+ ```bash
55
+ QASE_API_DOMAIN=api.yourcompany.qase.io
56
+ ```
57
+
58
+ ## Client Setup (stdio)
59
+
60
+ ### Claude Desktop
61
+
62
+ Add to your Claude Desktop configuration file:
63
+
64
+ **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
65
+ **Windows**: `%APPDATA%/Claude/claude_desktop_config.json`
66
+
67
+ ```json
68
+ {
69
+ "mcpServers": {
70
+ "qase": {
71
+ "command": "npx",
72
+ "args": ["-y", "@qase/mcp-server"],
73
+ "env": {
74
+ "QASE_API_TOKEN": "your_api_token_here"
75
+ }
76
+ }
77
+ }
78
+ }
79
+ ```
80
+
81
+ Or, if installed from source:
82
+
83
+ ```json
84
+ {
85
+ "mcpServers": {
86
+ "qase": {
87
+ "command": "node",
88
+ "args": ["/absolute/path/to/qase-mcp-server/build/index.js"],
89
+ "env": {
90
+ "QASE_API_TOKEN": "your_api_token_here"
91
+ }
92
+ }
93
+ }
94
+ }
95
+ ```
96
+
97
+ ### Cursor
98
+
99
+ > Prefer no install and no API token? Connect Cursor to the hosted server instead — see [Connect to the hosted Qase MCP](connect.md).
100
+
101
+ To run the server locally with your own token:
102
+
103
+ 1. Open Cursor Settings
104
+ 2. Navigate to MCP settings
105
+ 3. Add the Qase MCP server:
106
+
107
+ ```json
108
+ {
109
+ "mcpServers": {
110
+ "qase": {
111
+ "command": "npx",
112
+ "args": ["-y", "@qase/mcp-server"],
113
+ "env": {
114
+ "QASE_API_TOKEN": "your_api_token_here"
115
+ }
116
+ }
117
+ }
118
+ }
119
+ ```
120
+
121
+ ### Claude Code
122
+
123
+ You can add the Qase MCP server to Claude Code using the CLI command:
124
+
125
+ ```bash
126
+ claude mcp add qase -- npx -y @qase/mcp-server
127
+ ```
128
+
129
+ Set the required environment variable:
130
+
131
+ ```bash
132
+ export QASE_API_TOKEN=your_api_token_here
133
+ ```
134
+
135
+ Alternatively, add a `.mcp.json` file to your project root for automatic project-scoped configuration:
136
+
137
+ ```json
138
+ {
139
+ "mcpServers": {
140
+ "qase": {
141
+ "command": "npx",
142
+ "args": ["-y", "@qase/mcp-server"],
143
+ "env": {
144
+ "QASE_API_TOKEN": "your_api_token_here"
145
+ }
146
+ }
147
+ }
148
+ }
149
+ ```
150
+
151
+ You can also use the `--scope` flag to choose where the configuration is stored:
152
+
153
+ ```bash
154
+ # Project-scoped (saved in .mcp.json)
155
+ claude mcp add --scope project qase -- npx -y @qase/mcp-server
156
+
157
+ # User-scoped (available in all projects)
158
+ claude mcp add --scope user qase -- npx -y @qase/mcp-server
159
+ ```
160
+
161
+ ### OpenAI Codex CLI
162
+
163
+ Add a `.codex/config.json` file to your project root:
164
+
165
+ ```json
166
+ {
167
+ "mcpServers": {
168
+ "qase": {
169
+ "command": "npx",
170
+ "args": ["-y", "@qase/mcp-server"],
171
+ "env": {
172
+ "QASE_API_TOKEN": "your_api_token_here"
173
+ }
174
+ }
175
+ }
176
+ }
177
+ ```
178
+
179
+ Set the required environment variable before running Codex:
180
+
181
+ ```bash
182
+ export QASE_API_TOKEN=your_api_token_here
183
+ ```
184
+
185
+ ### OpenCode
186
+
187
+ Add an `opencode.json` file to your project root (or `~/.config/opencode/opencode.json` for global configuration):
188
+
189
+ ```json
190
+ {
191
+ "mcp": {
192
+ "qase": {
193
+ "type": "local",
194
+ "command": ["npx", "-y", "@qase/mcp-server"],
195
+ "environment": {
196
+ "QASE_API_TOKEN": "your_api_token_here"
197
+ }
198
+ }
199
+ }
200
+ }
201
+ ```
202
+
203
+ > **Note:** OpenCode uses a different format from other MCP clients — the command and args are combined into a single `command` array, env vars go under `environment`, and servers are nested under `mcp` (not `mcpServers`).
204
+
205
+ ## Transports
206
+
207
+ The server supports multiple transport types for different use cases.
208
+
209
+ ### Stdio Transport (Default)
210
+
211
+ Used by MCP clients like Claude Desktop and Cursor:
212
+
213
+ ```bash
214
+ npm start
215
+ # or
216
+ npm run start:stdio
217
+ ```
218
+
219
+ ### SSE Transport
220
+
221
+ Server-Sent Events for web-based clients:
222
+
223
+ ```bash
224
+ npm run start:sse
225
+ # Server runs on http://localhost:3000/sse
226
+ # Health check: http://localhost:3000/health
227
+ # Metrics: http://localhost:3000/metrics
228
+ ```
229
+
230
+ ### Streamable HTTP Transport
231
+
232
+ Full HTTP-based transport with session management:
233
+
234
+ ```bash
235
+ npm run start:http
236
+ # Server runs on http://localhost:3000/mcp
237
+ # Health check: http://localhost:3000/health
238
+ # Metrics: http://localhost:3000/metrics
239
+ ```
240
+
241
+ ### Custom Configuration
242
+
243
+ ```bash
244
+ # Custom port and host
245
+ node build/index.js --transport streamable-http --port 8080 --host 0.0.0.0
246
+
247
+ # Available options:
248
+ # --transport: stdio | sse | streamable-http (default: stdio)
249
+ # --port: Port number (default: 3000)
250
+ # --host: Host address (default: 0.0.0.0)
251
+ ```
252
+
253
+ ### Monitoring
254
+
255
+ When using SSE or Streamable HTTP transport, a Prometheus-compatible `/metrics` endpoint is available:
256
+
257
+ ```bash
258
+ curl http://localhost:3000/metrics
259
+ ```
260
+
261
+ Metrics include:
262
+ - `qase_mcp_cache_hits_total` / `qase_mcp_cache_misses_total` - Cache hit/miss rates by tier (l1/l2)
263
+ - `qase_mcp_cache_errors_total` - Cache errors by tier
264
+ - `qase_mcp_circuit_breaker_state` - Redis circuit breaker state (0=closed, 1=half_open, 2=open)
265
+
266
+ > **Note:** This page covers running the server yourself with your own `QASE_API_TOKEN` (self-run). It does not cover operating the hosted OAuth proxy — that is internal operator documentation, not part of this guide.
267
+
268
+ ## Troubleshooting
269
+
270
+ Server not starting, authentication errors, or connection issues? See [Troubleshooting](troubleshooting.md).
package/docs/tools.md ADDED
@@ -0,0 +1,109 @@
1
+ # Tool Reference
2
+
3
+ The Qase MCP Server exposes **30 tools** across 6 groups: Read, QQL, Write, Composite, Escape hatch, and Meta.
4
+
5
+ ## Discovery model
6
+
7
+ To keep context-token usage low, tools are split into two visibility tiers:
8
+
9
+ - **`core`** — always listed to the MCP client, no activation needed (13 tools).
10
+ - **`discoverable`** — hidden by default; the LLM finds and activates them on demand via `qase_discover_tools`, which searches tool names/descriptions and activates matches for the rest of the session (17 tools, mostly deletes and secondary write operations).
11
+
12
+ If a tool you need isn't showing up in your client's tool list, call `qase_discover_tools` with a query (e.g. `"delete"`, `"milestone"`, `"attachment"`) to activate it first.
13
+
14
+ Every tool's schema uses "label or numeric ID" strings for Qase's configurable enum fields (`priority`, `severity`, `type`, `layer`, `behavior`, `status`, `automation` on cases); the server resolves labels against the workspace's actual system-field configuration at call time. See [Case enum values](#case-enum-values) below.
15
+
16
+ ## Read tools
17
+
18
+ | Tool | Description | Key params | Visibility |
19
+ | --- | --- | --- | --- |
20
+ | `qase_get` | Get any Qase entity by type and ID. Supports field projection via `fields`. `code` is required for project-scoped entities (case, suite, run, result, plan, defect, milestone, environment, shared_step, shared_parameter, configuration); optional for global entities (user, author, attachment, custom_field). | `entity` (enum: case, suite, run, result, plan, defect, milestone, environment, shared_step, shared_parameter, configuration, attachment, author, user, custom_field), `code` (optional), `id` (number or hash string), `fields` (optional string array — pass `["*"]` for all) | core |
21
+ | `qase_project_context` | Get full project context in one call: project details, suites tree, milestones, environments, custom fields, and users. Cached for 5 minutes. Recommended as the first call when starting work with a project. | `code` | core |
22
+
23
+ ## QQL tools
24
+
25
+ | Tool | Description | Key params | Visibility |
26
+ | --- | --- | --- | --- |
27
+ | `qql_search` | Search entities using Qase Query Language (QQL) with powerful filtering and cross-project queries. | `query` (1-1000 chars, QQL expression), `limit` (optional, max 100, default 10), `offset` (optional) | core |
28
+ | `qql_help` | Get help and examples for QQL syntax. | `topic` (optional enum: syntax, entities, operators, functions, examples — omit for general overview) | core |
29
+
30
+ ## Write tools
31
+
32
+ <details>
33
+ <summary>Write tools (21)</summary>
34
+
35
+ | Tool | Description | Key params | Visibility |
36
+ | --- | --- | --- | --- |
37
+ | `qase_case_upsert` | Create or update a test case. If `id` is provided, updates the existing case; if omitted, creates a new one. Enum fields (priority, severity, type, etc.) accept both labels ("high", "blocker") and numeric IDs — the server normalizes automatically. | `code`, `id` (optional), `title` (1-255 chars), `description`, `preconditions`, `postconditions`, `severity`, `priority`, `type`, `layer`, `behavior`, `automation`, `status` (all label-or-ID strings), `is_flaky`, `suite_id`, `milestone_id`, `steps` (array, supports nesting), `steps_type` (enum: classic, gherkin), `tags`, `attachments`, `custom_field` | core |
38
+ | `qase_case_delete` | Delete a test case by project code and case ID. | `code`, `id` | discoverable |
39
+ | `qase_defect_upsert` | Create or update a defect. If `id` is provided, updates (including status changes and resolve). If omitted, creates a new defect. Set `status: "resolved"` to resolve an existing defect. | `code`, `id` (optional), `title` (1-255 chars), `actual_result`, `severity` (enum, see [below](#case-enum-values)), `status` (enum: open, in_progress, resolved, invalid), `tags`, `attachments`, `custom_field` | core |
40
+ | `qase_defect_delete` | Delete a defect by project code and defect ID. | `code`, `id` | discoverable |
41
+ | `qase_run_upsert` | Create or update a test run. If `id` is provided, updates; if omitted, creates. | `code`, `id` (optional), `title` (1-255 chars), `description`, `environment_id`, `milestone_id`, `plan_id`, `cases` (case ID array), `tags`, `is_autotest`, `start_time`/`end_time` (RFC3339), `custom_field` | core |
42
+ | `qase_run_complete` | Mark a test run as complete. | `code`, `id` | discoverable |
43
+ | `qase_run_delete` | Delete a test run. | `code`, `id` | discoverable |
44
+ | `qase_result_record` | Record one or more test results into a run. A single entry uses the single-result API, multiple entries use bulk. Each result must include a status; `case_id` is recommended. | `code`, `run_id`, `results` (array, min 1) — each result: `case_id` (optional), `status` (enum: passed, failed, blocked, skipped, invalid), `comment`, `stacktrace`, `time_ms`, `defect` (bool), `steps` (array with `position`, `status`, `comment`, `attachments`), `attachments`, `custom_field` | core |
45
+ | `qase_result_delete` | Delete a test result by run ID and result hash. | `code`, `run_id`, `hash` | discoverable |
46
+ | `qase_suite_upsert` | Create or update a test suite. If `id` is provided, updates the existing suite; if omitted, creates a new one. | `code`, `id` (optional), `title` (1-255 chars), `description`, `preconditions`, `parent_id` (for nesting) | discoverable |
47
+ | `qase_suite_delete` | Delete a test suite. If `delete_cases` is true, removes all cases in the suite; if false or omitted, cases are moved to the parent suite. | `code`, `id`, `delete_cases` (optional bool) | discoverable |
48
+ | `qase_milestone_upsert` | Create or update a milestone. If `id` is provided, updates the existing milestone; if omitted, creates a new one. | `code`, `id` (optional), `title` (1-255 chars), `description`, `status` (enum: active, completed), `due_date` (Unix timestamp) | discoverable |
49
+ | `qase_milestone_delete` | Delete a milestone by project code and milestone ID. | `code`, `id` | discoverable |
50
+ | `qase_plan_upsert` | Create or update a test plan. If `id` is provided, updates the existing plan; if omitted, creates a new one. | `code`, `id` (optional), `title` (1-255 chars), `description`, `cases` (case ID array) | discoverable |
51
+ | `qase_plan_delete` | Delete a test plan by project code and plan ID. | `code`, `id` | discoverable |
52
+ | `qase_shared_step_upsert` | Create or update a shared step. If `hash` is provided, updates the existing shared step; if omitted, creates a new one. Shared steps are reusable steps included in multiple test cases. | `code`, `hash` (optional), `title` (1-255 chars), `steps` (array: `action`, `expected_result`, `data`, `attachments`) | discoverable |
53
+ | `qase_shared_step_delete` | Delete a shared step by project code and hash. | `code`, `hash` | discoverable |
54
+ | `qase_environment_upsert` | Create or update a test environment. If `id` is provided, updates the existing environment; if omitted, creates a new one. | `code`, `id` (optional), `title` (1-255 chars), `description`, `slug`, `host` | discoverable |
55
+ | `qase_environment_delete` | Delete a test environment by project code and environment ID. | `code`, `id` | discoverable |
56
+ | `qase_attachment_upload` | Upload a file attachment. Accepts the file as a base64 encoded string or an absolute path. Returns the attachment hash that can be referenced in test cases and results. | `code`, `file` (base64 string or absolute path), `filename` | discoverable |
57
+ | `qase_attachment_delete` | Delete an attachment by its hash. | `hash` | discoverable |
58
+
59
+ </details>
60
+
61
+ ## Composite tools
62
+
63
+ Composite tools chain several underlying operations into one call, so an agent avoids multi-step round-trips for common workflows.
64
+
65
+ | Tool | Description | Key params | Visibility |
66
+ | --- | --- | --- | --- |
67
+ | `qase_ci_report` | Report CI/CD test results in one call: creates a run, records all results, and optionally completes the run. Replaces the 3-4 step manual workflow of create_run → bulk_create_results → complete_run. Designed for CI pipeline integration. | `code`, `title` (1-255 chars), `environment_id` (optional), `results` (array, min 1: `case_id`, `status` (enum: passed, failed, blocked, skipped, invalid), `comment`, `time_ms`, `stacktrace`, `defect`, `attachments`), `complete` (default true), `is_autotest` (default true) | core |
68
+ | `qase_regression_run` | Set up a regression test run in one call. Accepts case selection by suite IDs, explicit case IDs, or plan ID. Creates the run and adds all matching cases. Replaces the multi-step workflow of find cases → create run → add cases. | `code`, `title` (1-255 chars), `description`, `environment_id`, `milestone_id`, `plan_id`, `suite_ids` (array), `include_cases` (array) | core |
69
+ | `qase_triage_defect` | Create a defect from a test failure and optionally link it to failed results. Streamlines the triage workflow: create defect → link to failing tests. | `code`, `title` (1-255 chars), `severity` (enum, see [below](#case-enum-values)), `actual_result`, `description`, `run_id` (optional, informational), `failed_result_ids` (result hashes, optional), `tags`, `attachments`, `custom_field` | core |
70
+
71
+ ## Escape hatch
72
+
73
+ | Tool | Description | Key params | Visibility |
74
+ | --- | --- | --- | --- |
75
+ | `qase_api` | Direct Qase REST API call for endpoints not covered by other tools. Pass the HTTP method, path (starting with `/v1/`), and optional body/query. Use this when the dedicated tools do not cover your use case. See [developers.qase.io](https://developers.qase.io) for the API reference. | `method` (enum: GET, POST, PUT, PATCH, DELETE — default GET), `path` (e.g. `/v1/project/DEMO/run`), `body` (optional object, for POST/PUT/PATCH), `query` (optional object) | core |
76
+
77
+ ## Meta
78
+
79
+ | Tool | Description | Key params | Visibility |
80
+ | --- | --- | --- | --- |
81
+ | `qase_discover_tools` | Search for and activate additional Qase tools. By default, only core tools are visible. Use this to find tools for specific needs: deletions, milestone management, attachments, etc. Found tools are automatically activated and become available for use. | `query` (optional, matches tool name/description), `category` (optional enum: read, write, delete, composite, all), `activate` (optional bool, default true) | core |
82
+
83
+ ## Case enum values
84
+
85
+ Test case enum fields (`priority`, `severity`, `type`, `layer`, `behavior`, `status`, `automation`) are **workspace-configurable system fields**, not fixed literals in the tool schema — each Qase workspace can rename/reorder its own options. Tool calls accept either the field's label (e.g. `"high"`, `"blocker"`), its slug, or its numeric ID as a string; the server resolves the value against the workspace's live system-field configuration (fetched from the Qase API and cached for 5 minutes — see `src/utils/case-enums.ts`) before sending the request.
86
+
87
+ The `automation` field is the one exception with a fixed, documented mapping (translated internally to the API's `isManual`/`isToBeAutomated` fields):
88
+
89
+ | Value | Meaning |
90
+ | --- | --- |
91
+ | `0` | Manual (not automated) |
92
+ | `1` | To be automated |
93
+ | `2` | Automated |
94
+
95
+ `priority` has a conventional (but still workspace-configurable) numeric mapping:
96
+
97
+ | Value | Meaning |
98
+ | --- | --- |
99
+ | `0` | Not set |
100
+ | `1` | High |
101
+ | `2` | Medium |
102
+ | `3` | Low |
103
+
104
+ Two tools use **fixed** (non-configurable) Zod enums instead of workspace system fields:
105
+
106
+ - **Defect `severity`** (`qase_defect_upsert`, `qase_triage_defect`): `undefined`, `blocker`, `critical`, `major`, `normal`, `minor`, `trivial`.
107
+ - **Defect `status`** (`qase_defect_upsert`): `open`, `in_progress`, `resolved`, `invalid`.
108
+ - **Result `status`** (`qase_result_record`, `qase_ci_report`): `passed`, `failed`, `blocked`, `skipped`, `invalid` (result *steps* use the same set minus `invalid`).
109
+ - **Milestone `status`** (`qase_milestone_upsert`): `active`, `completed`.
@@ -0,0 +1,144 @@
1
+ # Troubleshooting
2
+
3
+ Issues are grouped by how you're connecting: the [hosted connector](connect.md) (OAuth, no local install) or a [self-run](self-run.md) server (your own `QASE_API_TOKEN`). If you're not sure which applies, most people using the hosted server at `https://mcp.qase.io/mcp` should look at the **Hosted Connector / OAuth** section first.
4
+
5
+ ## Authentication Errors (Self-Run)
6
+
7
+ **Error**: `Authentication failed: Please check your QASE_API_TOKEN`
8
+
9
+ This means the server is running locally (self-run) and rejected the token it was given.
10
+
11
+ **Solution**:
12
+ 1. Verify your API token is correct: https://app.qase.io/user/api/token
13
+ 2. Ensure `QASE_API_TOKEN` is set in your environment or MCP client config's `env` section
14
+ 3. Check for extra spaces or stray quotes around the token value
15
+ 4. If you're on the hosted connector instead (no `QASE_API_TOKEN` involved), see [Hosted Connector / OAuth](#hosted-connector--oauth) below
16
+
17
+ ## Hosted Connector / OAuth
18
+
19
+ These apply when connecting to the Qase-hosted server (`https://mcp.qase.io/mcp`) — see [Connect to the hosted Qase MCP](connect.md). There's no `QASE_API_TOKEN` here; authentication is a browser-based OAuth sign-in to your Qase account.
20
+
21
+ ### Access denied / Enterprise plan required
22
+
23
+ The hosted Qase MCP is available on the **Enterprise** plan in Qase. If your workspace is on another plan, requests are rejected with an access/plan error — the connector may sign in but tool calls fail with a plan-related message.
24
+
25
+ **Solution**: upgrade to the Enterprise plan, or [run the server yourself](self-run.md) with your own `QASE_API_TOKEN` (works on any plan).
26
+
27
+ ### Connector doesn't appear, or won't connect
28
+
29
+ **Solution**:
30
+ 1. Confirm the server URL is exactly `https://mcp.qase.io/mcp` — no trailing slash variations, no surrounding quotes (see the clean-URL footgun below)
31
+ 2. Confirm your MCP client supports remote (HTTP) servers with OAuth 2.1 — older clients or stdio-only integrations can't connect to a hosted URL
32
+ 3. Restart your MCP client completely (close and reopen) after adding the server
33
+ 4. Check that your network/firewall allows outbound HTTPS to `mcp.qase.io`
34
+
35
+ ### "Auth required" or empty tool list after connecting
36
+
37
+ If you completed the browser sign-in but the client still reports the connector needs authorization, or shows zero tools:
38
+
39
+ **Solution**:
40
+ 1. Make sure you actually completed the sign-in flow in the browser tab/window it opened — some clients silently fail if that tab is closed early
41
+ 2. Try disconnecting and reconnecting the connector (not just refreshing the client)
42
+ 3. If reconnecting doesn't help, follow the full remove-and-re-add steps below — a stale or partially-completed OAuth session is a common cause
43
+ 4. Confirm you're signed in to the correct Qase account/workspace in your browser — if you have multiple Qase sessions, the wrong one may be active
44
+
45
+ ### Clean-URL footgun: stray quote or `%22` breaks OAuth
46
+
47
+ A very common cause of persistent auth failures: the server URL got saved with an extra quote character around it, e.g. `"https://mcp.qase.io/mcp"` or its URL-encoded form `https://mcp.qase.io/mcp%22`. This can happen from copy-pasting a URL out of JSON, a table, or a chat message that included the quotes.
48
+
49
+ That stray character poisons the OAuth callback — it changes the client's registered redirect/resource identifiers, so the authorization server and the client end up disagreeing about the URL, and sign-in fails (or appears to succeed but leaves an empty tool list).
50
+
51
+ **This is not fixable by editing the URL in place.** Once a client has registered or cached an OAuth session against the bad URL, editing the field to remove the quote isn't enough — the client may still replay the old (poisoned) auth request from its cache.
52
+
53
+ **Solution**:
54
+ 1. Fully **remove** the server entry from your MCP client (don't just edit it)
55
+ 2. Re-**add** it as a new entry
56
+ 3. Type the URL by hand: `https://mcp.qase.io/mcp` — no surrounding quotes, no extra characters
57
+ 4. Complete the browser sign-in again from this fresh entry
58
+
59
+ ### Browser sign-in is required
60
+
61
+ The hosted connector authenticates via OAuth in your default browser — there's no token to paste in. If your MCP client is running in an environment without a browser available (e.g. certain headless or remote setups), the sign-in step can't complete. Use a client/environment that can open a browser, or fall back to the [self-run guide](self-run.md) with your own `QASE_API_TOKEN`.
62
+
63
+ ### Session expires after 7 days of inactivity
64
+
65
+ An active hosted-connector session stays valid for **7 days**. As long as you use the connector within any 7-day window, it keeps working with no re-authorization. If a full week passes with no activity, the session expires and you'll be asked to sign in again.
66
+
67
+ **Solution**: when the client reports that authorization is needed, re-run the sign-in flow — it opens your browser; complete the Qase login and the connector resumes. No need to remove and re-add the server.
68
+
69
+ ## Connection Errors
70
+
71
+ **Error**: `Network error` or `ECONNREFUSED`
72
+
73
+ **Solution**:
74
+ 1. Check your internet connection
75
+ 2. Verify the API domain is correct (especially for enterprise customers)
76
+ 3. Check if Qase is accessible: https://api.qase.io/v1/
77
+
78
+ ## SSL Certificate Errors
79
+
80
+ **Error**: `unable to get local issuer certificate`
81
+
82
+ This error typically occurs in corporate environments with:
83
+ - SSL-intercepting proxy servers
84
+ - Self-signed certificates
85
+ - Internal Certificate Authorities (CA)
86
+
87
+ **Solution**: Add the `NODE_EXTRA_CA_CERTS` environment variable pointing to your CA certificate file:
88
+
89
+ ```json
90
+ {
91
+ "mcpServers": {
92
+ "qase": {
93
+ "command": "npx",
94
+ "args": ["-y", "@qase/mcp-server"],
95
+ "env": {
96
+ "QASE_API_TOKEN": "your_api_token_here",
97
+ "NODE_EXTRA_CA_CERTS": "/path/to/your/certificate.pem"
98
+ }
99
+ }
100
+ }
101
+ }
102
+ ```
103
+
104
+ To find your certificate:
105
+ - **Corporate environments**: Contact your IT department for the CA certificate
106
+ - **macOS**: Export from Keychain Access (System Roots → your CA → Export as .pem)
107
+ - **Windows**: Export from Certificate Manager (certmgr.msc)
108
+ - **Linux**: Usually in `/etc/ssl/certs/` or `/etc/pki/tls/certs/`
109
+
110
+ ## Custom Domain Issues
111
+
112
+ **Error**: `Invalid domain` or connection errors with custom domain
113
+
114
+ **Solution**:
115
+ 1. Ensure `QASE_API_DOMAIN` is set to just the domain (e.g., `api.company.qase.io`)
116
+ 2. Don't include `https://` or `/v1` in the domain
117
+ 3. Verify with your Qase administrator
118
+
119
+ ## No Tools Showing in MCP Client
120
+
121
+ **Error**: MCP client shows "no tools, prompts or resources" or 0 tools available
122
+
123
+ **Solution**:
124
+ 1. Verify your MCP configuration has the correct command and arguments (self-run) or the correct URL (hosted)
125
+ 2. For self-run: check that `QASE_API_TOKEN` is set in the `env` section
126
+ 3. For the hosted connector: check the [Hosted Connector / OAuth](#hosted-connector--oauth) section above, especially the clean-URL footgun
127
+ 4. Restart your MCP client completely (close and reopen)
128
+ 5. Check the MCP client logs for connection errors
129
+ 6. For self-run from source, verify the server is built: `npm run build`
130
+
131
+ ## Tool Not Found
132
+
133
+ **Error**: `Unknown tool: tool_name`
134
+
135
+ **Solution**:
136
+ 1. Ensure you're using the latest version: `npm update -g @qase/mcp-server` (self-run) — the hosted connector always runs the latest version
137
+ 2. If upgrading from v1, tool names have changed — see [MIGRATION.md](../MIGRATION.md)
138
+ 3. Restart your MCP client after updating
139
+
140
+ ## Still stuck?
141
+
142
+ - **Documentation**: https://docs.qase.io/en/articles/14984302-qase-mcp-server
143
+ - **Email**: support@qase.io
144
+ - **GitHub Issues**: https://github.com/qase-tms/qase-mcp-server/issues
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qase/mcp-server",
3
- "version": "1.1.7",
3
+ "version": "2.0.0",
4
4
  "mcpName": "io.qase/mcp-server",
5
5
  "description": "Official MCP server for Qase Test Management Platform",
6
6
  "type": "module",
@@ -54,6 +54,7 @@
54
54
  "test": "jest",
55
55
  "test:watch": "jest --watch",
56
56
  "test:coverage": "jest --coverage",
57
+ "test:integration": "REDIS_TEST_URL=${REDIS_TEST_URL:-redis://localhost:6379} jest src/cache/layered.integration.test.ts",
57
58
  "inspector": "npx @modelcontextprotocol/inspector node build/index.js",
58
59
  "start": "node build/index.js",
59
60
  "start:stdio": "node build/index.js --transport stdio",
@@ -70,9 +71,11 @@
70
71
  "axios": "^1.13.5",
71
72
  "express": "^4.18.2",
72
73
  "form-data": "^4.0.5",
74
+ "jose": "^6.1.3",
75
+ "lru-cache": "^11.3.5",
73
76
  "neverthrow": "^8.2.0",
74
- "npm": "^11.12.1",
75
- "qase-api-client": "^1.1.7",
77
+ "npm": "^12.0.1",
78
+ "qase-api-client": "^1.1.10",
76
79
  "zod": "^3.24.2",
77
80
  "zod-to-json-schema": "^3.24.3"
78
81
  },
@@ -80,8 +83,10 @@
80
83
  "@types/express": "^4.17.21",
81
84
  "@types/jest": "^29.5.12",
82
85
  "@types/node": "^20.11.24",
86
+ "@types/supertest": "^6.0.3",
83
87
  "@typescript-eslint/eslint-plugin": "^8.26.1",
84
88
  "@typescript-eslint/parser": "^8.26.1",
89
+ "axios-mock-adapter": "^2.1.0",
85
90
  "eslint": "^9.22.0",
86
91
  "eslint-config-prettier": "^10.1.1",
87
92
  "eslint-plugin-prettier": "^5.2.3",
@@ -89,10 +94,14 @@
89
94
  "jest": "^29.7.0",
90
95
  "lint-staged": "^16.2.3",
91
96
  "prettier": "^3.4.2",
97
+ "supertest": "^7.2.2",
92
98
  "ts-jest": "^29.1.2",
93
99
  "typescript": "^5.3.3"
94
100
  },
95
101
  "overrides": {
96
102
  "js-yaml@3": "3.14.2"
103
+ },
104
+ "optionalDependencies": {
105
+ "ioredis": "^5.10.1"
97
106
  }
98
107
  }
package/server.json CHANGED
@@ -8,12 +8,12 @@
8
8
  "url": "https://github.com/qase-tms/qase-mcp-server",
9
9
  "source": "github"
10
10
  },
11
- "version": "1.1.7",
11
+ "version": "2.0.0",
12
12
  "packages": [
13
13
  {
14
14
  "registryType": "npm",
15
15
  "identifier": "@qase/mcp-server",
16
- "version": "1.1.7",
16
+ "version": "2.0.0",
17
17
  "transport": {
18
18
  "type": "stdio"
19
19
  },
@@ -33,6 +33,12 @@
33
33
  ]
34
34
  }
35
35
  ],
36
+ "remotes": [
37
+ {
38
+ "type": "streamable-http",
39
+ "url": "https://mcp.qase.io/mcp"
40
+ }
41
+ ],
36
42
  "_meta": {
37
43
  "io.modelcontextprotocol.registry/publisher-provided": {
38
44
  "privacyPolicyUrl": "https://qase.io/privacy"
@@ -1,8 +0,0 @@
1
- /**
2
- * Attachments Operations
3
- *
4
- * Implements all MCP tools for managing attachments in Qase.
5
- * Attachments are files associated with test cases, steps, and results.
6
- */
7
- export {};
8
- //# sourceMappingURL=attachments.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../src/operations/attachments.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}