gitlab-api 27.3.2__py3-none-any.whl → 27.3.3__py3-none-any.whl

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.
@@ -1,4 +1,4 @@
1
- connector: gitlab-api
1
+ connector: gitlab-mcp
2
2
  ontology_source: gitlab
3
3
  schema_version: '1'
4
4
  resources:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "algorithm": "agent-connector-sdk:mcp-tool-contract-compat:v2",
3
- "connector": "gitlab-api",
3
+ "connector": "gitlab-mcp",
4
4
  "schema_version": "1",
5
5
  "tools": {
6
6
  "gitlab_get_projects": "18b7c440b1165616ba8455535985becf3c14d643a22f40c34d4f321c736c9e06"
gitlab_api/kg_ingest.py CHANGED
@@ -23,7 +23,7 @@ from agent_connector_sdk.ingest import (
23
23
  current_ingest,
24
24
  )
25
25
 
26
- _BINDING = IngestBinding(connector="gitlab-api", stream="gitlab")
26
+ _BINDING = IngestBinding(connector="gitlab-mcp", stream="gitlab")
27
27
 
28
28
  _ENTITY_RESERVED_KEYS = frozenset({"id", "node_type"})
29
29
  _RELATIONSHIP_RESERVED_KEYS = frozenset({"source", "target", "relationship"})
gitlab_api/mcp_server.py CHANGED
@@ -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.2"
38
+ __version__ = "27.3.3"
39
39
  print(f"Gitlab MCP v{__version__}", file=sys.stderr)
40
40
 
41
41
  logger = get_logger(name="mcp_server")
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "api_version": "arbora.io/v1",
3
3
  "artifacts": {
4
- "connector_manifest.yml": "994ca982e951c529bbc3ae0206bbe94e0f5cc66d5ffb659c94e2d925a15af130",
4
+ "connector_manifest.yml": "ce8e95019a673f0268315c5ec472e7dc7ff3d924f5d3594a90f0f4e10a9ee11a",
5
5
  "gitlab_api/connectors/mcp_source_presets.json": "08401d486ad760f128203a710577be5be0a7c892acd6f46685077d19294b641e",
6
- "gitlab_api/connectors/tool_schema_fingerprints.json": "5e7928f836de01dc652c26eff3dbbdbde221f5cfe03b90b2d1479b83502c05ce",
6
+ "gitlab_api/connectors/tool_schema_fingerprints.json": "0cf8e4ef949fc58d36f74b949ae9e8f5ec25dc607dfb186da1eb1efc3728edc1",
7
7
  "gitlab_api/ontology/fixtures/records.json": "5f0417820053941933f15b3f459750753f4e8e34cf1e7853fd030c1143356b40",
8
8
  "gitlab_api/ontology/gitlab.ttl": "19fa64000d2e51c60c53074b1fae4ab98aed85318337b5a2199f4837ae9f3fc0",
9
9
  "gitlab_api/ontology/mappings/source.yaml": "167206b5387f7ca97ce02e0f15164f8fe41f06b413b591d0008c29e9f0a95e7f",
@@ -22,7 +22,7 @@
22
22
  "bundle_schema": "2",
23
23
  "epistemic_graph": ">=2.27.0,<3"
24
24
  },
25
- "connector": "gitlab-api",
25
+ "connector": "gitlab-mcp",
26
26
  "kind": "ConnectorSourceAttestation",
27
27
  "live_certified": false,
28
28
  "mode": "offline-source",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitlab-api
3
- Version: 27.3.2
3
+ Version: 27.3.3
4
4
  Summary: GitLab API + MCP Server
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -12,11 +12,11 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: >=3.12
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.5
15
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.11
16
16
  Requires-Dist: python-dotenv>=1.2.4
17
17
  Requires-Dist: gql[requests]>=4.4.0
18
18
  Provides-Extra: mcp
19
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.5; extra == "mcp"
19
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.11; extra == "mcp"
20
20
  Provides-Extra: gql
21
21
  Requires-Dist: gql[requests]>=4.4.0; extra == "gql"
22
22
  Provides-Extra: all
@@ -50,7 +50,7 @@ Dynamic: license-file
50
50
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/gitlab-api)
51
51
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/gitlab-api)
52
52
 
53
- *Version: 27.3.2*
53
+ *Version: 27.3.3*
54
54
 
55
55
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
56
56
  > backing GitLab instance are maintained in the
@@ -2,15 +2,15 @@ gitlab_api/__init__.py,sha256=AL1xZwPaU1Gzu53VrWYsDptCebPdfucmt3A6yStoPkc,2811
2
2
  gitlab_api/__main__.py,sha256=MlKO_lzO6h18UmnI-D20s27-Ej94gQn8Pa0EqOlwFOM,90
3
3
  gitlab_api/api_client.py,sha256=Id5iu7ID3fjc-sIAu3QhKyGCUCPy_uXxfZi5VxDkmUc,1087
4
4
  gitlab_api/auth.py,sha256=OOY6o1XWDG-ysfgUuOFb_W1bIb9Ub-734ezGVkSirJw,8919
5
- gitlab_api/connector_manifest.yml,sha256=mUypgulRxSm7w64CBrvpTg9cxm1f-2WclOLZJaFa8TA,13588
5
+ gitlab_api/connector_manifest.yml,sha256=zo6VAZpnPwJoMVxexHLn3H_z2ST101lKkPD04Qqe4Ro,13588
6
6
  gitlab_api/connector_prep.py,sha256=f_awZY5i9rvTLNde9iqVA1XLs_iqt5UmK4yLXPSO0Cw,60174
7
7
  gitlab_api/gitlab_gql.py,sha256=nBEU7K1RzLmZeZ1qD1U0-9NcRBwMu0xt_I0wDfRkGw8,106270
8
8
  gitlab_api/gitlab_input_models.py,sha256=35_ySA8E2GEbuGEjBtFeyiWiuqJMMEp3D2vRELiKwwE,115437
9
9
  gitlab_api/gitlab_response_models.py,sha256=m0jU8Xtwbq2y0AogCptVCslWlvi6SztLMDQZLSkefs8,150449
10
10
  gitlab_api/instances.py,sha256=RW7aKRvHWMQAQ5ZRRcjpKgpPgq_5YoncXt-_rC4ReXk,5423
11
- gitlab_api/kg_ingest.py,sha256=Verv5y0OtMYDXmzMoUD5EDUC8PZBiVfTddU5nND38b0,10750
11
+ gitlab_api/kg_ingest.py,sha256=tH-JDsyNUoU0X51ja9wNOxGTxgrfvg5wVyk78ju1AlU,10750
12
12
  gitlab_api/mcp_config.json,sha256=2OOXrwO1sDLyHQqpZwhvDHizPIe3by6YmK4KFE333gI,23
13
- gitlab_api/mcp_server.py,sha256=0Cq9QStZ_YDvciiSNArNJPwALsNWUQbdcE6ffSKRvE8,51850
13
+ gitlab_api/mcp_server.py,sha256=mLirjUaXEyojBSBaQUra_3oRFhgGL3AMA2WXk2WxQlg,51850
14
14
  gitlab_api/api/__init__.py,sha256=MQblcZQoMdWyzpfnlAOEmyVlP7pbNcz_BQgAs5JINOI,27
15
15
  gitlab_api/api/api_client_base.py,sha256=0jdaCaV0tCxbNop6mdtq4nXgbrxEXu-ENoOxVmlaORE,8670
16
16
  gitlab_api/api/api_client_environments.py,sha256=2OQ88aStucaKO-VNc6NbXJxQdB761h0aJnPcVaHwBxo,26403
@@ -25,9 +25,9 @@ gitlab_api/api/api_client_users_groups.py,sha256=0tpy-Bxx9mP2imeIQGJMmzlpxSKGaKu
25
25
  gitlab_api/api/api_client_vulnerabilities.py,sha256=O2HNDopoaWlG0_wQNQvhZKNibFOOOzjXCOFzO8GzAZA,6168
26
26
  gitlab_api/connectors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  gitlab_api/connectors/mcp_source_presets.json,sha256=CEAdSGrXYPEoIDpxBXe-W-CnyJKs1vRmhQd9GSlLZB4,733
28
- gitlab_api/connectors/tool_schema_fingerprints.json,sha256=Xnko-DbeAdxlLCbv89u9veIh9c_gO5Cy0Uebg1AsBc4,235
28
+ gitlab_api/connectors/tool_schema_fingerprints.json,sha256=DPjk75SfxY0290uUmuno9ewl3GB9-xhtoese_Dco7cE,235
29
29
  gitlab_api/ontology/__init__.py,sha256=508Z6ZA4AHEfTFVfTLsenl0Lj_3sfI-MZG8icDzlOSo,568
30
- gitlab_api/ontology/certification.json,sha256=1Gfxi5Nu-EdYhtsHJYaHW2dqblLhclfVCzaWgM5Cs4w,1650
30
+ gitlab_api/ontology/certification.json,sha256=bMKifpxXWVF-EAjfPBonuSfUYb0gwbE4oSTSg7p5mgQ,1650
31
31
  gitlab_api/ontology/gitlab.ttl,sha256=qJvCWigVMhMF80HpMwegHGC3cG5pAtC8jBESD4BchXU,8028
32
32
  gitlab_api/ontology/ingest_sources.json,sha256=ss1dw8bXIQ4NJLlfji1mZhKTK9zsXxUwUR4zCu3BsPk,457
33
33
  gitlab_api/ontology/fixtures/records.json,sha256=XwQXggBTlBkz8Vs_RZdQdT9OjjTPHnhT_QMMEUM1a0A,553
@@ -50,7 +50,7 @@ gitlab_api/skills/gitlab-pipelines/SKILL.md,sha256=OuEk9sRMjJQQzCE2eZtRq9-wgtWRO
50
50
  gitlab_api/skills/gitlab-pipelines/WORKFLOW.md,sha256=6C61qo-byMs-7bvry3NKCtyzdRWOEjhC-mOG0ZJvsL0,4314
51
51
  gitlab_api/skills/gitlab-vulnerabilities/SKILL.md,sha256=acBODboYBGccTtuCAv5fv5cY_gEXedMSmepur3q9f9Q,5212
52
52
  gitlab_api/skills/gitlab-vulnerabilities/WORKFLOW.md,sha256=OKnEKILIrhsnnNQTu0MLSQAWR6jL2w6PuX6ztu0Nhdk,5041
53
- gitlab_api-27.3.2.dist-info/licenses/LICENSE,sha256=9eAPQLU4cIYQNvAIt6PNoiVQozaVoPRhMV_N7_UHG7A,1068
53
+ gitlab_api-27.3.3.dist-info/licenses/LICENSE,sha256=9eAPQLU4cIYQNvAIt6PNoiVQozaVoPRhMV_N7_UHG7A,1068
54
54
  scripts/check_import_safety.py,sha256=IjaMe7nWwK261tNPO8vmLdDy-skX1mpMACQKJhvp0ik,13503
55
55
  scripts/security_contract.py,sha256=3517zbvFsLEaWhZOiBwjb9lQiNvH8C-8HzlK4i4SBF8,25137
56
56
  scripts/security_sanitizer.py,sha256=W1LGgsq_uksvJ-oqwHIIcE4szNCCDAWA_PheBYSPnXg,9813
@@ -60,13 +60,14 @@ tests/conftest.py,sha256=srq80Qcj_VFRxMFCYZ6pXtEDfXO1PzVY-HEI4kmm29s,2090
60
60
  tests/test_api_wrapper.py,sha256=jUXDVR4lKOZLTvE3vAS8Xjkc4q57smd6MJr7u_eBU9U,5717
61
61
  tests/test_auth.py,sha256=dpiDD9Z5SfN6re59tb22PqkbsY8A8pWOBX9KuoXoTTc,4404
62
62
  tests/test_connector_prep.py,sha256=YgPoTq0nFqsZ4HA1Iq7F_jJlKxscePvgQJREZB3bczk,10770
63
+ tests/test_fleet_name.py,sha256=HCJLmN-n4mMy--HawJ0x1BYqtUlBIh4WDMcsxYEkwNY,1723
63
64
  tests/test_gitlab_a2a_validation.py,sha256=Wxu7zSIxnmT5bOg-BwFvR6z9TprSzObG5mIEC4NBwwM,5130
64
65
  tests/test_gitlab_api_brute_force_coverage.py,sha256=yS3LoPE6JCC2jcI2agYmNI8kpSBK9jAZsmGnrYq-mPU,14294
65
66
  tests/test_gitlab_gql.py,sha256=UVMGoYCkaB3EjyGouADp98AYzkyRv7iR-NweHhMrwtQ,11198
66
67
  tests/test_gitlab_mcp_validation.py,sha256=Ma2e3ZchIVUHF0OJPPAW1DRYEG6X-I6dUFRpLE31Rwk,2423
67
68
  tests/test_gitlab_models.py,sha256=9buJwE0VmioDXRcKlCfcKYgg6PdQnx7HvDRBPnMC3Ak,542220
68
69
  tests/test_identity_context_scoping.py,sha256=wY_xb37E7qd91F5NNhf0g2Hv1uRyrM0wnCO_6WEEcW4,2269
69
- tests/test_ingest_sources.py,sha256=XCPTezZIdauzQdrIR9P5KiXG9ZuB1YfvIXGVuAo6Hks,1347
70
+ tests/test_ingest_sources.py,sha256=x2RItPOvlnExwOFJStkTfgwFoVU4Pl6gSC5zYpKlxJI,1347
70
71
  tests/test_init_dynamics.py,sha256=fsfRhuT6yCY91JXoHd7gbHfuPjZfLW0A7aJgyXptL6E,1693
71
72
  tests/test_instances.py,sha256=C8csQIJPv1Wdbh4Le2JBg1pM7iFo5rYfL-vp_aGwOtA,4167
72
73
  tests/test_kg_ingest.py,sha256=sgo6KNYKs7xbvbmKZDOXpHDhb3YkXvxjWsIELpxcAGI,7633
@@ -76,8 +77,8 @@ tests/test_startup.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
77
  tests/test_tool_modes.py,sha256=aiAaQE0yXp9SKGz9BVgik4HIjE5kar8FBD9uVOK5pwA,721
77
78
  tests/test_verify_agent.py,sha256=XdW2NtR5643rgjDYLu6RajWu-4wqrZjCUsRehfsKCqQ,6465
78
79
  tests/verify_a2a_queries.py,sha256=JMKBexwzo6c59NpVrBfYgW4HnmSG8-qqfdeku5YFtwc,3613
79
- gitlab_api-27.3.2.dist-info/METADATA,sha256=umVBzzDghYU6_Ey2fpEuH4PPnDm1BiMgxKBcNXZ_cUs,40527
80
- gitlab_api-27.3.2.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
81
- gitlab_api-27.3.2.dist-info/entry_points.txt,sha256=-FUZqPa8FPHty3mGFhNlFRajrMh6fgSgV8fcxAI1KTA,366
82
- gitlab_api-27.3.2.dist-info/top_level.txt,sha256=fJ-T_zkuttbq8Kn1dq0mBvyjtKqPdMic01oCdbzxh_k,48
83
- gitlab_api-27.3.2.dist-info/RECORD,,
80
+ gitlab_api-27.3.3.dist-info/METADATA,sha256=JHgvvkY0Uw1HfTWHshcAkz9l8cRhcKhB8anre3pCl-s,40529
81
+ gitlab_api-27.3.3.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
82
+ gitlab_api-27.3.3.dist-info/entry_points.txt,sha256=Vtq_7rahKslu8zMAoC7Kqn_BsdnPgsuVvR-5u_MpJRs,423
83
+ gitlab_api-27.3.3.dist-info/top_level.txt,sha256=fJ-T_zkuttbq8Kn1dq0mBvyjtKqPdMic01oCdbzxh_k,48
84
+ gitlab_api-27.3.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (84.0.0)
2
+ Generator: setuptools (84.2.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,3 +1,6 @@
1
+ [agent_connector_sdk.connector]
2
+ gitlab-mcp = gitlab_api
3
+
1
4
  [agent_connector_sdk.ontology_providers]
2
5
  gitlab-api = gitlab_api.ontology
3
6
 
@@ -0,0 +1,50 @@
1
+ """CONN-GITLAB-API-R002: the connector is filed under its fleet name, gitlab-mcp."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import ast
6
+ import json
7
+ import re
8
+ import tomllib
9
+ from pathlib import Path
10
+
11
+ import pytest
12
+
13
+ ROOT = Path(__file__).resolve().parents[1]
14
+ PACKAGE = ROOT / "gitlab_api"
15
+ FLEET = "gitlab-mcp"
16
+
17
+
18
+ def _call_connectors(path: Path) -> list[str]:
19
+ names = []
20
+ for node in ast.walk(ast.parse(path.read_text(encoding="utf-8"))):
21
+ if isinstance(node, ast.Call) and getattr(
22
+ node.func, "id", getattr(node.func, "attr", "")
23
+ ) in {
24
+ "IngestBinding",
25
+ "ConnectorContent",
26
+ }:
27
+ names += [
28
+ str(k.value.value)
29
+ for k in node.keywords
30
+ if k.arg == "connector" and isinstance(k.value, ast.Constant)
31
+ ]
32
+ return names
33
+
34
+
35
+ @pytest.mark.spec("CONN-GITLAB-API-R002")
36
+ def test_connector_name_is_the_fleet_name() -> None:
37
+ pyproject = tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8"))
38
+ assert pyproject["project"]["entry-points"]["agent_connector_sdk.connector"] == {
39
+ FLEET: "gitlab_api"
40
+ }
41
+ manifest = (PACKAGE / "connector_manifest.yml").read_text(encoding="utf-8")
42
+ match = re.search(r'^\s*"?connector"?\s*:\s*"?([^"\s,]+)', manifest, re.MULTILINE)
43
+ assert match is not None and match.group(1) == FLEET
44
+ fingerprints = PACKAGE / "connectors" / "tool_schema_fingerprints.json"
45
+ if fingerprints.is_file():
46
+ assert (
47
+ json.loads(fingerprints.read_text(encoding="utf-8"))["connector"] == FLEET
48
+ )
49
+ for module in sorted(PACKAGE.glob("*.py")):
50
+ assert all(name == FLEET for name in _call_connectors(module)), module.name
@@ -18,7 +18,7 @@ from gitlab_api.api_client import Api
18
18
  def test_declares_ingestible_sources() -> None:
19
19
  declaration = load_ingest_sources(Path(gitlab_api.__file__).parent)
20
20
  assert declaration is not None
21
- assert declaration.connector == "gitlab-api"
21
+ assert declaration.connector == "gitlab-mcp"
22
22
  source = declaration.source("projects")
23
23
  assert source is not None and source.record_type == "Project"
24
24
  prefix = operation_prefix("gitlab-api")