gitlab-api 27.3.7__tar.gz → 27.3.8__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.
Files changed (94) hide show
  1. {gitlab_api-27.3.7/gitlab_api.egg-info → gitlab_api-27.3.8}/PKG-INFO +2 -2
  2. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/README.md +1 -1
  3. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/connector_manifest.yml +26 -163
  4. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/mcp_server.py +1 -1
  5. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/ontology/gitlab.ttl +6 -28
  6. {gitlab_api-27.3.7 → gitlab_api-27.3.8/gitlab_api.egg-info}/PKG-INFO +2 -2
  7. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api.egg-info/SOURCES.txt +1 -0
  8. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/pyproject.toml +1 -1
  9. gitlab_api-27.3.8/tests/test_cq_paths.py +51 -0
  10. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_ontology_parent_link.py +0 -5
  11. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/LICENSE +0 -0
  12. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/MANIFEST.in +0 -0
  13. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/__init__.py +0 -0
  14. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/__main__.py +0 -0
  15. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/api/__init__.py +0 -0
  16. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/api/api_client_base.py +0 -0
  17. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/api/api_client_environments.py +0 -0
  18. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/api/api_client_issues.py +0 -0
  19. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/api/api_client_merge_requests.py +0 -0
  20. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/api/api_client_other.py +0 -0
  21. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/api/api_client_pipelines.py +0 -0
  22. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/api/api_client_projects.py +0 -0
  23. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/api/api_client_repositories.py +0 -0
  24. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/api/api_client_system.py +0 -0
  25. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/api/api_client_users_groups.py +0 -0
  26. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/api/api_client_vulnerabilities.py +0 -0
  27. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/api_client.py +0 -0
  28. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/auth.py +0 -0
  29. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/connector_prep.py +0 -0
  30. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/connectors/__init__.py +0 -0
  31. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/connectors/mcp_source_presets.json +0 -0
  32. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/connectors/tool_schema_fingerprints.json +0 -0
  33. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/gitlab_gql.py +0 -0
  34. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/gitlab_input_models.py +0 -0
  35. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/gitlab_response_models.py +0 -0
  36. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/instances.py +0 -0
  37. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/kg_ingest.py +0 -0
  38. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/mcp_config.json +0 -0
  39. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/ontology/__init__.py +0 -0
  40. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/ontology/certification.json +0 -0
  41. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/ontology/fixtures/records.json +0 -0
  42. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/ontology/ingest_sources.json +0 -0
  43. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/ontology/mappings/source.yaml +0 -0
  44. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/ontology/migrations/manifest.json +0 -0
  45. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/ontology/shapes/connector.shacl.ttl +0 -0
  46. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/prompts/__init__.py +0 -0
  47. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/prompts/devops_specialist.json +0 -0
  48. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/skills/__init__.py +0 -0
  49. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/skills/gitlab-api-operations/SKILL.md +0 -0
  50. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/skills/gitlab-api-operations/agents/openai.yaml +0 -0
  51. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/skills/gitlab-api-operations/references/catalog.md +0 -0
  52. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/skills/gitlab-issues/SKILL.md +0 -0
  53. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/skills/gitlab-issues/WORKFLOW.md +0 -0
  54. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/skills/gitlab-merge-request-create/SKILL.md +0 -0
  55. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/skills/gitlab-merge-request-create/WORKFLOW.md +0 -0
  56. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/skills/gitlab-merge-request-review/SKILL.md +0 -0
  57. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/skills/gitlab-merge-request-review/WORKFLOW.md +0 -0
  58. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/skills/gitlab-pipelines/SKILL.md +0 -0
  59. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/skills/gitlab-pipelines/WORKFLOW.md +0 -0
  60. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/skills/gitlab-vulnerabilities/SKILL.md +0 -0
  61. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api/skills/gitlab-vulnerabilities/WORKFLOW.md +0 -0
  62. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api.egg-info/dependency_links.txt +0 -0
  63. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api.egg-info/entry_points.txt +0 -0
  64. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api.egg-info/requires.txt +0 -0
  65. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/gitlab_api.egg-info/top_level.txt +0 -0
  66. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/requirements.txt +0 -0
  67. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/scripts/check_import_safety.py +0 -0
  68. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/scripts/security_contract.py +0 -0
  69. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/scripts/security_sanitizer.py +0 -0
  70. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/scripts/verify_api_integration.py +0 -0
  71. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/setup.cfg +0 -0
  72. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/__init__.py +0 -0
  73. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/conftest.py +0 -0
  74. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_api_wrapper.py +0 -0
  75. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_auth.py +0 -0
  76. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_connector_prep.py +0 -0
  77. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_default_content_surfaces.py +0 -0
  78. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_fleet_name.py +0 -0
  79. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_gitlab_a2a_validation.py +0 -0
  80. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_gitlab_api_brute_force_coverage.py +0 -0
  81. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_gitlab_gql.py +0 -0
  82. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_gitlab_mcp_validation.py +0 -0
  83. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_gitlab_models.py +0 -0
  84. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_identity_context_scoping.py +0 -0
  85. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_ingest_sources.py +0 -0
  86. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_init_dynamics.py +0 -0
  87. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_instances.py +0 -0
  88. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_kg_ingest.py +0 -0
  89. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_mock_coverage.py +0 -0
  90. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_security_sanitizer.py +0 -0
  91. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_startup.py +0 -0
  92. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_tool_modes.py +0 -0
  93. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/test_verify_agent.py +0 -0
  94. {gitlab_api-27.3.7 → gitlab_api-27.3.8}/tests/verify_a2a_queries.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitlab-api
3
- Version: 27.3.7
3
+ Version: 27.3.8
4
4
  Summary: GitLab API + MCP Server
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -45,7 +45,7 @@ Dynamic: license-file
45
45
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/gitlab-api)
46
46
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/gitlab-api)
47
47
 
48
- *Version: 27.3.7*
48
+ *Version: 27.3.8*
49
49
 
50
50
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
51
51
  > backing GitLab instance are maintained in the
@@ -20,7 +20,7 @@
20
20
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/gitlab-api)
21
21
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/gitlab-api)
22
22
 
23
- *Version: 27.3.7*
23
+ *Version: 27.3.8*
24
24
 
25
25
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
26
26
  > backing GitLab instance are maintained in the
@@ -2,18 +2,10 @@ connector: gitlab-mcp
2
2
  ontology_source: gitlab
3
3
  schema_version: '1'
4
4
  resources:
5
- - name: Branch
6
- label: Branch
7
- id_prefix: branch
8
- relations: []
9
5
  - name: CheckRun
10
6
  label: Check Run
11
7
  id_prefix: checkrun
12
8
  relations: []
13
- - name: Commit
14
- label: Commit
15
- id_prefix: commit
16
- relations: []
17
9
  - name: Epic
18
10
  label: Epic
19
11
  id_prefix: epic
@@ -46,10 +38,6 @@ resources:
46
38
  label: targets branch
47
39
  target: Branch
48
40
  lpg_rel_type: ''
49
- - name: Milestone
50
- label: Milestone
51
- id_prefix: milestone
52
- relations: []
53
41
  - name: Pipeline
54
42
  label: Pipeline
55
43
  id_prefix: pipeline
@@ -58,14 +46,6 @@ resources:
58
46
  label: has job
59
47
  target: Job
60
48
  lpg_rel_type: ''
61
- - name: PipelineRun
62
- label: Pipeline Run
63
- id_prefix: pipelinerun
64
- relations:
65
- - name: ranFor
66
- label: ran for
67
- target: owl:Thing
68
- lpg_rel_type: ''
69
49
  - name: Project
70
50
  label: Project
71
51
  id_prefix: project
@@ -74,14 +54,6 @@ resources:
74
54
  label: part of group
75
55
  target: GitLabGroup
76
56
  lpg_rel_type: ''
77
- - name: Release
78
- label: Release
79
- id_prefix: release
80
- relations: []
81
- - name: Runner
82
- label: Runner
83
- id_prefix: runner
84
- relations: []
85
57
  actions:
86
58
  - id: epistemic-answer
87
59
  name: Epistemic Answer
@@ -123,40 +95,8 @@ permissions:
123
95
  tenant_field: null
124
96
  read_roles: []
125
97
  schema_mappings:
126
- Branch:
127
- ontology_class: null
128
- fields:
129
- createdAt: xsd:dateTime
130
- duration: xsd:decimal
131
- failureReason: xsd:string
132
- finishedAt: xsd:dateTime
133
- iid: xsd:string
134
- logUrl: xsd:string
135
- pipelineStatus: xsd:string
136
- ref: xsd:string
137
- sha: xsd:string
138
- startedAt: xsd:dateTime
139
- state: xsd:string
140
- triggerSource: xsd:string
141
- webUrl: xsd:string
142
98
  CheckRun:
143
- ontology_class: null
144
- fields:
145
- createdAt: xsd:dateTime
146
- duration: xsd:decimal
147
- failureReason: xsd:string
148
- finishedAt: xsd:dateTime
149
- iid: xsd:string
150
- logUrl: xsd:string
151
- pipelineStatus: xsd:string
152
- ref: xsd:string
153
- sha: xsd:string
154
- startedAt: xsd:dateTime
155
- state: xsd:string
156
- triggerSource: xsd:string
157
- webUrl: xsd:string
158
- Commit:
159
- ontology_class: null
99
+ ontology_class: PipelineRun
160
100
  fields:
161
101
  createdAt: xsd:dateTime
162
102
  duration: xsd:decimal
@@ -172,7 +112,7 @@ schema_mappings:
172
112
  triggerSource: xsd:string
173
113
  webUrl: xsd:string
174
114
  Epic:
175
- ontology_class: null
115
+ ontology_class: WorkItem
176
116
  fields:
177
117
  createdAt: xsd:dateTime
178
118
  duration: xsd:decimal
@@ -188,7 +128,7 @@ schema_mappings:
188
128
  triggerSource: xsd:string
189
129
  webUrl: xsd:string
190
130
  GitLabGroup:
191
- ontology_class: Organization
131
+ ontology_class: IdentityGroup
192
132
  fields:
193
133
  createdAt: xsd:dateTime
194
134
  duration: xsd:decimal
@@ -204,7 +144,7 @@ schema_mappings:
204
144
  triggerSource: xsd:string
205
145
  webUrl: xsd:string
206
146
  Issue:
207
- ontology_class: Incident
147
+ ontology_class: WorkItem
208
148
  fields:
209
149
  createdAt: xsd:dateTime
210
150
  duration: xsd:decimal
@@ -236,23 +176,7 @@ schema_mappings:
236
176
  triggerSource: xsd:string
237
177
  webUrl: xsd:string
238
178
  MergeRequest:
239
- ontology_class: null
240
- fields:
241
- createdAt: xsd:dateTime
242
- duration: xsd:decimal
243
- failureReason: xsd:string
244
- finishedAt: xsd:dateTime
245
- iid: xsd:string
246
- logUrl: xsd:string
247
- pipelineStatus: xsd:string
248
- ref: xsd:string
249
- sha: xsd:string
250
- startedAt: xsd:dateTime
251
- state: xsd:string
252
- triggerSource: xsd:string
253
- webUrl: xsd:string
254
- Milestone:
255
- ontology_class: null
179
+ ontology_class: PullRequest
256
180
  fields:
257
181
  createdAt: xsd:dateTime
258
182
  duration: xsd:decimal
@@ -268,23 +192,7 @@ schema_mappings:
268
192
  triggerSource: xsd:string
269
193
  webUrl: xsd:string
270
194
  Pipeline:
271
- ontology_class: null
272
- fields:
273
- createdAt: xsd:dateTime
274
- duration: xsd:decimal
275
- failureReason: xsd:string
276
- finishedAt: xsd:dateTime
277
- iid: xsd:string
278
- logUrl: xsd:string
279
- pipelineStatus: xsd:string
280
- ref: xsd:string
281
- sha: xsd:string
282
- startedAt: xsd:dateTime
283
- state: xsd:string
284
- triggerSource: xsd:string
285
- webUrl: xsd:string
286
- PipelineRun:
287
- ontology_class: null
195
+ ontology_class: PipelineRun
288
196
  fields:
289
197
  createdAt: xsd:dateTime
290
198
  duration: xsd:decimal
@@ -315,38 +223,6 @@ schema_mappings:
315
223
  state: xsd:string
316
224
  triggerSource: xsd:string
317
225
  webUrl: xsd:string
318
- Release:
319
- ontology_class: null
320
- fields:
321
- createdAt: xsd:dateTime
322
- duration: xsd:decimal
323
- failureReason: xsd:string
324
- finishedAt: xsd:dateTime
325
- iid: xsd:string
326
- logUrl: xsd:string
327
- pipelineStatus: xsd:string
328
- ref: xsd:string
329
- sha: xsd:string
330
- startedAt: xsd:dateTime
331
- state: xsd:string
332
- triggerSource: xsd:string
333
- webUrl: xsd:string
334
- Runner:
335
- ontology_class: null
336
- fields:
337
- createdAt: xsd:dateTime
338
- duration: xsd:decimal
339
- failureReason: xsd:string
340
- finishedAt: xsd:dateTime
341
- iid: xsd:string
342
- logUrl: xsd:string
343
- pipelineStatus: xsd:string
344
- ref: xsd:string
345
- sha: xsd:string
346
- startedAt: xsd:dateTime
347
- state: xsd:string
348
- triggerSource: xsd:string
349
- webUrl: xsd:string
350
226
  sync:
351
227
  - preset: gitlab-projects
352
228
  server: gitlab-mcp
@@ -376,20 +252,20 @@ sync:
376
252
  params_style: args
377
253
  provenance:
378
254
  generated_by: scripts/generate_connector_manifests.py
379
- generated_at: '2026-10-18T00:00:00Z'
255
+ generated_at: '2026-10-23T00:00:00Z'
380
256
  source_artifacts:
381
257
  - gitlab_api/connectors/mcp_source_presets.json
382
258
  - gitlab_api/connectors/tool_schema_fingerprints.json
383
259
  - gitlab_api/ontology/gitlab.ttl
384
260
  integrity:
385
261
  algorithm: urdna2015-sha256
386
- hash: 832bf7f47b008ce2c318e1d89f2a2a306992994ec0f44d2ee102919eac7bedb4
387
- triple_count: 113
262
+ hash: 51cdef79ba7080a662846127c295b57fed42f9c35abd42d513112051eeebf473
263
+ triple_count: 95
388
264
  signer: UNSIGNED-PREVIEW
389
265
  signature_algorithm: none
390
266
  signing_public_key: ''
391
267
  signature: null
392
- source_commit: 868761312fcdc217b3f596fcf4cfcc8a173752e6
268
+ source_commit: 0ad207db86cf74ee989ebf72581f432906efe85a
393
269
  policy:
394
270
  pii_fields: {}
395
271
  tenant_boundary: null
@@ -403,37 +279,24 @@ review_todos:
403
279
  \ ontology \u2014 not attached to any resource; verify its true domain manually."
404
280
  - "relation 'hasMilestone' has no declared rdfs:domain resolving to a known resource in this connector's\
405
281
  \ ontology \u2014 not attached to any resource; verify its true domain manually."
282
+ - "relation 'ranFor' has no declared rdfs:domain resolving to a known resource in this connector's ontology\
283
+ \ \u2014 not attached to any resource; verify its true domain manually."
406
284
  - "relation 'triggeredPipeline' has no declared rdfs:domain resolving to a known resource in this connector's\
407
285
  \ ontology \u2014 not attached to any resource; verify its true domain manually."
408
- - "schema_mappings.Branch.ontology_class = None [UNRESOLVED \u2014 no crosswalk found by any heuristic]\
409
- \ \u2014 verify manually before relying on this crosswalk for reasoning/joins."
410
- - "schema_mappings.CheckRun.ontology_class = None [UNRESOLVED \u2014 no crosswalk found by any heuristic]\
411
- \ \u2014 verify manually before relying on this crosswalk for reasoning/joins."
412
- - "schema_mappings.Commit.ontology_class = None [UNRESOLVED \u2014 no crosswalk found by any heuristic]\
413
- \ \u2014 verify manually before relying on this crosswalk for reasoning/joins."
414
- - "schema_mappings.Epic.ontology_class = None [UNRESOLVED \u2014 no crosswalk found by any heuristic]\
415
- \ \u2014 verify manually before relying on this crosswalk for reasoning/joins."
416
- - "schema_mappings.GitLabGroup.ontology_class = 'Organization' [DRAFT \u2014 nearest hub-canonical-class-by-name\
417
- \ heuristic (D16 residue; human sign-off required before use)] \u2014 verify manually before relying\
418
- \ on this crosswalk for reasoning/joins."
419
- - "schema_mappings.Issue.ontology_class = 'Incident' [DRAFT \u2014 nearest hub-canonical-class-by-name\
420
- \ heuristic (D16 residue; human sign-off required before use)] \u2014 verify manually before relying\
421
- \ on this crosswalk for reasoning/joins."
286
+ - "schema_mappings.CheckRun.ontology_class = 'PipelineRun' [source ttl rdfs:subClassOf] \u2014 verify\
287
+ \ manually before relying on this crosswalk for reasoning/joins."
288
+ - "schema_mappings.Epic.ontology_class = 'WorkItem' [source ttl rdfs:subClassOf] \u2014 verify manually\
289
+ \ before relying on this crosswalk for reasoning/joins."
290
+ - "schema_mappings.GitLabGroup.ontology_class = 'IdentityGroup' [source ttl rdfs:subClassOf] \u2014 verify\
291
+ \ manually before relying on this crosswalk for reasoning/joins."
292
+ - "schema_mappings.Issue.ontology_class = 'WorkItem' [source ttl rdfs:subClassOf] \u2014 verify manually\
293
+ \ before relying on this crosswalk for reasoning/joins."
422
294
  - "schema_mappings.Job.ontology_class = 'Action' [DRAFT \u2014 nearest hub-canonical-class-by-name heuristic\
423
295
  \ (D16 residue; human sign-off required before use)] \u2014 verify manually before relying on this crosswalk\
424
296
  \ for reasoning/joins."
425
- - "schema_mappings.MergeRequest.ontology_class = None [UNRESOLVED \u2014 no crosswalk found by any heuristic]\
426
- \ \u2014 verify manually before relying on this crosswalk for reasoning/joins."
427
- - "schema_mappings.Milestone.ontology_class = None [UNRESOLVED \u2014 no crosswalk found by any heuristic]\
428
- \ \u2014 verify manually before relying on this crosswalk for reasoning/joins."
429
- - "schema_mappings.Pipeline.ontology_class = None [UNRESOLVED \u2014 no crosswalk found by any heuristic]\
430
- \ \u2014 verify manually before relying on this crosswalk for reasoning/joins."
431
- - "schema_mappings.PipelineRun.ontology_class = None [UNRESOLVED \u2014 no crosswalk found by any heuristic]\
432
- \ \u2014 verify manually before relying on this crosswalk for reasoning/joins."
433
- - "schema_mappings.Project.ontology_class = 'SoftwareProject' [DRAFT \u2014 nearest hub-canonical-class-by-name\
434
- \ heuristic (D16 residue; human sign-off required before use)] \u2014 verify manually before relying\
435
- \ on this crosswalk for reasoning/joins."
436
- - "schema_mappings.Release.ontology_class = None [UNRESOLVED \u2014 no crosswalk found by any heuristic]\
437
- \ \u2014 verify manually before relying on this crosswalk for reasoning/joins."
438
- - "schema_mappings.Runner.ontology_class = None [UNRESOLVED \u2014 no crosswalk found by any heuristic]\
439
- \ \u2014 verify manually before relying on this crosswalk for reasoning/joins."
297
+ - "schema_mappings.MergeRequest.ontology_class = 'PullRequest' [source ttl rdfs:subClassOf] \u2014 verify\
298
+ \ manually before relying on this crosswalk for reasoning/joins."
299
+ - "schema_mappings.Pipeline.ontology_class = 'PipelineRun' [source ttl rdfs:subClassOf] \u2014 verify\
300
+ \ manually before relying on this crosswalk for reasoning/joins."
301
+ - "schema_mappings.Project.ontology_class = 'SoftwareProject' [source ttl rdfs:subClassOf] \u2014 verify\
302
+ \ manually before relying on this crosswalk for reasoning/joins."
@@ -35,7 +35,7 @@ from agent_connector_sdk.mcp.tool_surface import register_tool_surface
35
35
  from gitlab_api.api_client import Api
36
36
  from gitlab_api.auth import get_client
37
37
 
38
- __version__ = "27.3.7"
38
+ __version__ = "27.3.8"
39
39
  print(f"Gitlab MCP v{__version__}", file=sys.stderr)
40
40
 
41
41
  logger = get_logger(name="mcp_server")
@@ -11,6 +11,9 @@
11
11
  # per-package IRI. Backs the gitlab-api MCP tool surface (gitlab_projects / gitlab_merge_requests
12
12
  # / gitlab_pipelines / gitlab_issues / …).
13
13
 
14
+ # Shared concepts owned by the epistemic-graph ontology and referenced here, never redeclared:
15
+ # Commit, Branch, Release, Runner, Milestone, PipelineRun. Only the GitLab-specific subclasses and properties are declared in this pack.
16
+
14
17
  :GitLabGroup a owl:Class ;
15
18
  rdfs:subClassOf :IdentityGroup ;
16
19
  rdfs:label "GitLab Group" ;
@@ -22,6 +25,7 @@
22
25
  rdfs:comment "A GitLab project / repository (gitlab_projects)." .
23
26
 
24
27
  :MergeRequest a owl:Class ;
28
+ rdfs:subClassOf :PullRequest ;
25
29
  rdfs:label "Merge Request" ;
26
30
  rdfs:comment "A proposed change under review, from a source to a target branch (gitlab_merge_requests)." .
27
31
 
@@ -30,19 +34,12 @@
30
34
  rdfs:label "Pipeline" ;
31
35
  rdfs:comment "A CI/CD pipeline run for a commit/ref (gitlab_pipelines)." .
32
36
 
33
- :PipelineRun a owl:Class ;
34
- rdfs:label "Pipeline Run" ;
35
- rdfs:comment """A single CI/CD execution for a commit/ref/merge request (a GitLab pipeline
36
- run, ingested by gitlab_api.kg_ingest.ingest_pipeline_runs, id gitlab:pipelinerun:<project>:<id>).
37
- Shares its class name with the twin github-agent producer so GitLab CI/CD and GitHub Actions
38
- unify under one node shape in the knowledge graph.""" ;
39
- owl:equivalentClass :Pipeline .
40
-
41
37
  :Job a owl:Class ;
42
38
  rdfs:label "Job" ;
43
39
  rdfs:comment "A single stage/job within a pipeline (gitlab_jobs)." .
44
40
 
45
41
  :CheckRun a owl:Class ;
42
+ rdfs:subClassOf :PipelineRun ;
46
43
  rdfs:label "Check Run" ;
47
44
  rdfs:comment """A single job/check within a PipelineRun (a GitLab pipeline job, ingested by
48
45
  gitlab_api.kg_ingest.ingest_pipeline_runs, id gitlab:checkrun:<project>:<pipeline>:<job>).
@@ -59,26 +56,6 @@
59
56
  rdfs:label "Epic" ;
60
57
  rdfs:comment "A group-level container aggregating related issues (gitlab_epics)." .
61
58
 
62
- :Milestone a owl:Class ;
63
- rdfs:label "Milestone" ;
64
- rdfs:comment "A time-boxed delivery target grouping issues and merge requests (gitlab_milestones)." .
65
-
66
- :Commit a owl:Class ;
67
- rdfs:label "Commit" ;
68
- rdfs:comment "A git commit recorded in a project (gitlab_commits)." .
69
-
70
- :Branch a owl:Class ;
71
- rdfs:label "Branch" ;
72
- rdfs:comment "A named git branch within a project (gitlab_branches)." .
73
-
74
- :Release a owl:Class ;
75
- rdfs:label "Release" ;
76
- rdfs:comment "A tagged, published project release (gitlab_releases)." .
77
-
78
- :Runner a owl:Class ;
79
- rdfs:label "Runner" ;
80
- rdfs:comment "A CI runner that executes pipeline jobs (gitlab_runners)." .
81
-
82
59
  # --- links (owl:ObjectProperty) ---
83
60
 
84
61
  :belongsToProject a owl:ObjectProperty ;
@@ -154,6 +131,7 @@
154
131
  :state a owl:DatatypeProperty ;
155
132
  rdfs:label "state" ;
156
133
  rdfs:comment "Lifecycle state (opened, closed, merged, locked)." ;
134
+ rdfs:domain [ a owl:Class ; owl:unionOf ( :Issue :MergeRequest ) ] ;
157
135
  rdfs:range xsd:string .
158
136
 
159
137
  :pipelineStatus a owl:DatatypeProperty ;
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitlab-api
3
- Version: 27.3.7
3
+ Version: 27.3.8
4
4
  Summary: GitLab API + MCP Server
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -45,7 +45,7 @@ Dynamic: license-file
45
45
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/gitlab-api)
46
46
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/gitlab-api)
47
47
 
48
- *Version: 27.3.7*
48
+ *Version: 27.3.8*
49
49
 
50
50
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
51
51
  > backing GitLab instance are maintained in the
@@ -70,6 +70,7 @@ tests/conftest.py
70
70
  tests/test_api_wrapper.py
71
71
  tests/test_auth.py
72
72
  tests/test_connector_prep.py
73
+ tests/test_cq_paths.py
73
74
  tests/test_default_content_surfaces.py
74
75
  tests/test_fleet_name.py
75
76
  tests/test_gitlab_a2a_validation.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "gitlab-api"
7
- version = "27.3.7"
7
+ version = "27.3.8"
8
8
  description = "GitLab API + MCP Server"
9
9
  readme = "README.md"
10
10
  classifiers = [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: MIT License", "Environment :: Console", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3",]
@@ -0,0 +1,51 @@
1
+ """Competency-question paths of the GitLab pack (CONN-GITLAB-API-CONNECTOR-CONTENT-R004)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import re
6
+ from pathlib import Path
7
+
8
+ import pytest
9
+ import yaml
10
+
11
+ import gitlab_api
12
+
13
+ pytestmark = pytest.mark.spec("CONN-GITLAB-API-CONNECTOR-CONTENT-R004")
14
+
15
+ PACKAGE = Path(gitlab_api.__file__).parent
16
+ TTL = (PACKAGE / "ontology" / "gitlab.ttl").read_text("utf-8")
17
+ # Concepts the epistemic-graph ontology owns: referenced, never declared here.
18
+ SHARED = ("Commit", "Branch", "Release", "Runner", "Milestone", "PipelineRun")
19
+
20
+
21
+ def _block(name: str) -> str:
22
+ match = re.search(rf"^:{name} a [^\n]*\n(?:[^\n]+\n)*", TTL, flags=re.M)
23
+ assert match, name
24
+ return match.group(0)
25
+
26
+
27
+ @pytest.mark.parametrize("name", SHARED)
28
+ def test_shared_concepts_are_not_redeclared(name: str) -> None:
29
+ assert not re.search(rf"^:{name} a owl:Class", TTL, flags=re.M), name
30
+
31
+
32
+ def test_state_is_declared_on_the_issue_type() -> None:
33
+ block = _block("state")
34
+ assert re.search(r"rdfs:domain \[ a owl:Class ; owl:unionOf \( :Issue ", block)
35
+
36
+
37
+ def test_merge_request_and_check_run_extend_shared_classes() -> None:
38
+ assert "rdfs:subClassOf :PullRequest" in _block("MergeRequest")
39
+ assert "rdfs:subClassOf :PipelineRun" in _block("CheckRun")
40
+
41
+
42
+ def test_no_mapping_has_a_null_ontology_class() -> None:
43
+ manifest = yaml.safe_load(
44
+ (PACKAGE.parent / "connector_manifest.yml").read_text("utf-8")
45
+ )
46
+ unmapped = [
47
+ name
48
+ for name, mapping in manifest["schema_mappings"].items()
49
+ if not mapping["ontology_class"]
50
+ ]
51
+ assert unmapped == []
@@ -32,12 +32,7 @@ PARENT_CLASSES = frozenset(
32
32
  # parent class (see the orphan mapping report); a class leaves this set when it gains a parent.
33
33
  PENDING_NEW_PARENT: frozenset[str] = frozenset(
34
34
  (
35
- "http://knuckles.team/kg#Branch",
36
- "http://knuckles.team/kg#CheckRun",
37
35
  "http://knuckles.team/kg#Job",
38
- "http://knuckles.team/kg#Milestone",
39
- "http://knuckles.team/kg#Release",
40
- "http://knuckles.team/kg#Runner",
41
36
  )
42
37
  )
43
38
 
File without changes
File without changes
File without changes