gitlab-api 26.2.0__tar.gz → 27.3.1__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 (145) hide show
  1. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/LICENSE +1 -1
  2. gitlab_api-26.2.0/README.md → gitlab_api-27.3.1/PKG-INFO +99 -291
  3. gitlab_api-26.2.0/PKG-INFO → gitlab_api-27.3.1/README.md +69 -323
  4. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/__init__.py +32 -21
  5. gitlab_api-27.3.1/gitlab_api/__main__.py +4 -0
  6. gitlab_api-27.3.1/gitlab_api/api/api_client_base.py +242 -0
  7. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_environments.py +6 -42
  8. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_issues.py +3 -33
  9. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_merge_requests.py +3 -17
  10. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_other.py +3 -35
  11. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_pipelines.py +3 -41
  12. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_projects.py +35 -70
  13. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_repositories.py +3 -59
  14. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_system.py +4 -6
  15. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_users_groups.py +11 -31
  16. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_vulnerabilities.py +11 -9
  17. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api_client.py +2 -3
  18. gitlab_api-27.3.1/gitlab_api/auth.py +233 -0
  19. gitlab_api-27.3.1/gitlab_api/connector_manifest.yml +439 -0
  20. gitlab_api-27.3.1/gitlab_api/connector_prep.py +1720 -0
  21. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/connectors/mcp_source_presets.json +5 -5
  22. gitlab_api-27.3.1/gitlab_api/connectors/tool_schema_fingerprints.json +8 -0
  23. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/gitlab_gql.py +100 -44
  24. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/gitlab_input_models.py +165 -257
  25. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/gitlab_response_models.py +2 -5
  26. gitlab_api-27.3.1/gitlab_api/instances.py +156 -0
  27. gitlab_api-27.3.1/gitlab_api/kg_ingest.py +295 -0
  28. gitlab_api-27.3.1/gitlab_api/mcp_server.py +1382 -0
  29. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/ontology/__init__.py +2 -2
  30. gitlab_api-27.3.1/gitlab_api/ontology/certification.json +36 -0
  31. gitlab_api-27.3.1/gitlab_api/ontology/fixtures/records.json +21 -0
  32. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/ontology/gitlab.ttl +60 -2
  33. gitlab_api-27.3.1/gitlab_api/ontology/ingest_sources.json +19 -0
  34. gitlab_api-27.3.1/gitlab_api/ontology/mappings/source.yaml +20 -0
  35. gitlab_api-27.3.1/gitlab_api/ontology/migrations/manifest.json +6 -0
  36. gitlab_api-27.3.1/gitlab_api/ontology/shapes/connector.shacl.ttl +284 -0
  37. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/prompts/devops_specialist.json +1 -1
  38. gitlab_api-27.3.1/gitlab_api/skills/gitlab-api-operations/SKILL.md +33 -0
  39. gitlab_api-27.3.1/gitlab_api/skills/gitlab-api-operations/agents/openai.yaml +4 -0
  40. gitlab_api-27.3.1/gitlab_api/skills/gitlab-api-operations/references/catalog.md +9 -0
  41. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/skills/gitlab-issues/SKILL.md +3 -3
  42. gitlab_api-27.3.1/gitlab_api/skills/gitlab-issues/WORKFLOW.md +75 -0
  43. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/skills/gitlab-merge-request-create/SKILL.md +2 -2
  44. gitlab_api-27.3.1/gitlab_api/skills/gitlab-merge-request-create/WORKFLOW.md +66 -0
  45. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/skills/gitlab-merge-request-review/SKILL.md +6 -6
  46. gitlab_api-27.3.1/gitlab_api/skills/gitlab-merge-request-review/WORKFLOW.md +115 -0
  47. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/skills/gitlab-pipelines/SKILL.md +5 -5
  48. gitlab_api-27.3.1/gitlab_api/skills/gitlab-pipelines/WORKFLOW.md +89 -0
  49. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/skills/gitlab-vulnerabilities/SKILL.md +4 -4
  50. gitlab_api-27.3.1/gitlab_api/skills/gitlab-vulnerabilities/WORKFLOW.md +94 -0
  51. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api.egg-info/PKG-INFO +83 -307
  52. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api.egg-info/SOURCES.txt +23 -39
  53. gitlab_api-27.3.1/gitlab_api.egg-info/entry_points.txt +14 -0
  54. gitlab_api-27.3.1/gitlab_api.egg-info/requires.txt +18 -0
  55. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api.egg-info/top_level.txt +3 -0
  56. gitlab_api-27.3.1/pyproject.toml +82 -0
  57. gitlab_api-27.3.1/requirements.txt +1 -0
  58. gitlab_api-27.3.1/scripts/check_import_safety.py +302 -0
  59. gitlab_api-27.3.1/scripts/security_contract.py +748 -0
  60. gitlab_api-27.3.1/scripts/security_sanitizer.py +326 -0
  61. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/scripts/verify_api_integration.py +156 -112
  62. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/tests/test_api_wrapper.py +2 -2
  63. gitlab_api-27.3.1/tests/test_auth.py +129 -0
  64. gitlab_api-27.3.1/tests/test_connector_prep.py +337 -0
  65. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/tests/test_gitlab_a2a_validation.py +32 -26
  66. gitlab_api-27.3.1/tests/test_gitlab_api_brute_force_coverage.py +449 -0
  67. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/tests/test_gitlab_gql.py +49 -31
  68. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/tests/test_gitlab_mcp_validation.py +1 -1
  69. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/tests/test_gitlab_models.py +510 -510
  70. gitlab_api-27.3.1/tests/test_identity_context_scoping.py +71 -0
  71. gitlab_api-27.3.1/tests/test_ingest_sources.py +35 -0
  72. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/tests/test_instances.py +24 -11
  73. gitlab_api-27.3.1/tests/test_kg_ingest.py +202 -0
  74. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/tests/test_mock_coverage.py +11 -80
  75. gitlab_api-27.3.1/tests/test_security_sanitizer.py +30 -0
  76. gitlab_api-27.3.1/tests/test_startup.py +0 -0
  77. gitlab_api-27.3.1/tests/test_tool_modes.py +24 -0
  78. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/tests/test_verify_agent.py +1 -1
  79. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/tests/verify_a2a_queries.py +21 -11
  80. gitlab_api-26.2.0/gitlab_api/__main__.py +0 -4
  81. gitlab_api-26.2.0/gitlab_api/agent_server.py +0 -83
  82. gitlab_api-26.2.0/gitlab_api/api/api_client_base.py +0 -214
  83. gitlab_api-26.2.0/gitlab_api/auth.py +0 -180
  84. gitlab_api-26.2.0/gitlab_api/instances.py +0 -110
  85. gitlab_api-26.2.0/gitlab_api/kg_ingest.py +0 -144
  86. gitlab_api-26.2.0/gitlab_api/main_agent.json +0 -18
  87. gitlab_api-26.2.0/gitlab_api/mcp/__init__.py +0 -71
  88. gitlab_api-26.2.0/gitlab_api/mcp/mcp_branches.py +0 -59
  89. gitlab_api-26.2.0/gitlab_api/mcp/mcp_commits.py +0 -93
  90. gitlab_api-26.2.0/gitlab_api/mcp/mcp_custom_api.py +0 -47
  91. gitlab_api-26.2.0/gitlab_api/mcp/mcp_deploy_tokens.py +0 -77
  92. gitlab_api-26.2.0/gitlab_api/mcp/mcp_environments.py +0 -89
  93. gitlab_api-26.2.0/gitlab_api/mcp/mcp_epics.py +0 -59
  94. gitlab_api-26.2.0/gitlab_api/mcp/mcp_graphql.py +0 -86
  95. gitlab_api-26.2.0/gitlab_api/mcp/mcp_graphql_ops.py +0 -93
  96. gitlab_api-26.2.0/gitlab_api/mcp/mcp_groups.py +0 -72
  97. gitlab_api-26.2.0/gitlab_api/mcp/mcp_issues.py +0 -63
  98. gitlab_api-26.2.0/gitlab_api/mcp/mcp_jobs.py +0 -76
  99. gitlab_api-26.2.0/gitlab_api/mcp/mcp_labels.py +0 -59
  100. gitlab_api-26.2.0/gitlab_api/mcp/mcp_members.py +0 -53
  101. gitlab_api-26.2.0/gitlab_api/mcp/mcp_merge_requests.py +0 -65
  102. gitlab_api-26.2.0/gitlab_api/mcp/mcp_merge_rules.py +0 -100
  103. gitlab_api-26.2.0/gitlab_api/mcp/mcp_milestones.py +0 -59
  104. gitlab_api-26.2.0/gitlab_api/mcp/mcp_misc.py +0 -10
  105. gitlab_api-26.2.0/gitlab_api/mcp/mcp_namespaces.py +0 -53
  106. gitlab_api-26.2.0/gitlab_api/mcp/mcp_notes.py +0 -59
  107. gitlab_api-26.2.0/gitlab_api/mcp/mcp_packages.py +0 -55
  108. gitlab_api-26.2.0/gitlab_api/mcp/mcp_pipeline_schedules.py +0 -88
  109. gitlab_api-26.2.0/gitlab_api/mcp/mcp_pipelines.py +0 -53
  110. gitlab_api-26.2.0/gitlab_api/mcp/mcp_projects.py +0 -90
  111. gitlab_api-26.2.0/gitlab_api/mcp/mcp_protected_branches.py +0 -63
  112. gitlab_api-26.2.0/gitlab_api/mcp/mcp_releases.py +0 -87
  113. gitlab_api-26.2.0/gitlab_api/mcp/mcp_runners.py +0 -100
  114. gitlab_api-26.2.0/gitlab_api/mcp/mcp_snippets.py +0 -59
  115. gitlab_api-26.2.0/gitlab_api/mcp/mcp_tags.py +0 -75
  116. gitlab_api-26.2.0/gitlab_api/mcp/mcp_users.py +0 -61
  117. gitlab_api-26.2.0/gitlab_api/mcp/mcp_vulnerabilities.py +0 -59
  118. gitlab_api-26.2.0/gitlab_api/mcp/mcp_wiki.py +0 -63
  119. gitlab_api-26.2.0/gitlab_api/mcp_server.py +0 -1952
  120. gitlab_api-26.2.0/gitlab_api/prompts/main_agent.json +0 -18
  121. gitlab_api-26.2.0/gitlab_api.egg-info/entry_points.txt +0 -15
  122. gitlab_api-26.2.0/gitlab_api.egg-info/requires.txt +0 -21
  123. gitlab_api-26.2.0/pyproject.toml +0 -72
  124. gitlab_api-26.2.0/requirements.txt +0 -1
  125. gitlab_api-26.2.0/scripts/security_sanitizer.py +0 -160
  126. gitlab_api-26.2.0/scripts/validate_a2a_agent.py +0 -139
  127. gitlab_api-26.2.0/scripts/validate_agent.py +0 -62
  128. gitlab_api-26.2.0/tests/test_action_discovery.py +0 -70
  129. gitlab_api-26.2.0/tests/test_auth.py +0 -105
  130. gitlab_api-26.2.0/tests/test_concept_parity.py +0 -87
  131. gitlab_api-26.2.0/tests/test_gitlab_api_brute_force_coverage.py +0 -411
  132. gitlab_api-26.2.0/tests/test_kg_ingest.py +0 -93
  133. gitlab_api-26.2.0/tests/test_startup.py +0 -12
  134. gitlab_api-26.2.0/tests/test_tool_modes.py +0 -42
  135. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/MANIFEST.in +0 -0
  136. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/__init__.py +0 -0
  137. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/connectors/__init__.py +0 -0
  138. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/mcp_config.json +0 -0
  139. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/prompts/__init__.py +0 -0
  140. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/skills/__init__.py +0 -0
  141. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api.egg-info/dependency_links.txt +0 -0
  142. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/setup.cfg +0 -0
  143. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/tests/__init__.py +0 -0
  144. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/tests/conftest.py +0 -0
  145. {gitlab_api-26.2.0 → gitlab_api-27.3.1}/tests/test_init_dynamics.py +0 -0
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012-2023 Audel Rouhi
1
+ Copyright (c) 2012-2023 Project Maintainers
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -1,5 +1,35 @@
1
+ Metadata-Version: 2.4
2
+ Name: gitlab-api
3
+ Version: 27.3.1
4
+ Summary: GitLab API + MCP Server
5
+ Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
+ License: MIT
7
+ Classifier: Development Status :: 5 - Production/Stable
8
+ Classifier: License :: OSI Approved :: MIT License
9
+ Classifier: Environment :: Console
10
+ Classifier: Operating System :: POSIX :: Linux
11
+ Classifier: Programming Language :: Python :: 3
12
+ Requires-Python: >=3.12
13
+ Description-Content-Type: text/markdown
14
+ License-File: LICENSE
15
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.3
16
+ Requires-Dist: python-dotenv>=1.2.4
17
+ Requires-Dist: gql[requests]>=4.4.0
18
+ Provides-Extra: mcp
19
+ Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.3; extra == "mcp"
20
+ Provides-Extra: gql
21
+ Requires-Dist: gql[requests]>=4.4.0; extra == "gql"
22
+ Provides-Extra: all
23
+ Requires-Dist: gitlab-api[gql,mcp]>=27.2.0; extra == "all"
24
+ Provides-Extra: test
25
+ Requires-Dist: pytest-xdist>=3.8.0; extra == "test"
26
+ Requires-Dist: pytest>=9.1.1; extra == "test"
27
+ Requires-Dist: pytest-asyncio>=1.4.0; extra == "test"
28
+ Requires-Dist: pytest-cov>=7.1.0; extra == "test"
29
+ Dynamic: license-file
30
+
1
31
  # Gitlab Api
2
- ## CLI or API | MCP | Agent
32
+ ## CLI or API | MCP
3
33
 
4
34
  ![PyPI - Version](https://img.shields.io/pypi/v/gitlab-api)
5
35
  ![MCP Server](https://badge.mcpx.dev?type=server 'MCP Server')
@@ -20,10 +50,9 @@
20
50
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/gitlab-api)
21
51
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/gitlab-api)
22
52
 
23
- *Version: 26.2.0*
53
+ *Version: 27.3.1*
24
54
 
25
55
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
26
- > interfaces, the integrated A2A agent server, and guidance for provisioning the
27
56
  > backing GitLab instance are maintained in the
28
57
  > [official documentation](https://knuckles-team.github.io/gitlab-api/).
29
58
 
@@ -31,22 +60,21 @@
31
60
 
32
61
  ## Overview
33
62
 
34
- **Gitlab Api** is a production-grade Agent and Model Context Protocol (MCP) server designed to interface directly with GitLab API + MCP Server + A2A Server.
63
+ **Gitlab Api** is a production-grade Agent and Model Context Protocol (MCP) server designed to interface directly with GitLab API + MCP Server.
35
64
 
36
65
  ---
37
66
 
38
67
  ## Key Features
39
68
 
40
69
  - **Consolidated Action-Routed MCP Tools:** Minimizes token overhead and eliminates tool bloat in LLM contexts by grouping methods into optimized, togglable tool modules.
41
- - **Enterprise-Grade Security:** Comprehensive support for Eunomia policies, OIDC token delegation, and granular execution context tracking.
42
- - **Integrated Graph Agent:** Built-in Pydantic AI agent supporting the Agent Control Protocol (ACP) and standard Web interfaces (AG-UI).
70
+ - **Enterprise-Grade Security:** Complete support for Eunomia policies, OIDC token delegation, and granular execution context tracking.
43
71
  - **Native Telemetry & Tracing:** Out-of-the-box OpenTelemetry exports and native Langfuse tracing.
44
72
 
45
73
  ---
46
74
 
47
75
  ## CLI or API
48
76
 
49
- This agent wraps the GitLab API + MCP Server + A2A Server API. You can interact with it programmatically or via its integrated execution entrypoints.
77
+ This agent wraps the GitLab API + MCP Server API. The operator can interact with it programmatically or via its integrated execution entrypoints.
50
78
 
51
79
  Detailed instructions on how to use the underlying API wrappers, extended schema bindings, and developer SDK references are maintained in [docs/index.md](docs/index.md).
52
80
 
@@ -54,15 +82,15 @@ Detailed instructions on how to use the underlying API wrappers, extended schema
54
82
 
55
83
  ## MCP
56
84
 
57
- This server utilizes dynamic Action-Routed tools to optimize token overhead and maximize IDE compatibility.
85
+ This server use dynamic Action-Routed tools to optimize token overhead and maximize IDE compatibility.
58
86
 
59
87
  ### Tool surface — `MCP_TOOL_MODE`
60
88
 
61
- Set `MCP_TOOL_MODE` (in the shared `~/.config/agent-utilities/config.json` or env):
89
+ Set `MCP_TOOL_MODE` (in the shared `~/.config/agent-connector-sdk/config.json` or env):
62
90
  `condensed` (default — the action-routed tools below), `verbose` (one named 1:1 tool
63
91
  per API method, e.g. `gitlab_get_branches(...)`, tagged `verbose`), or `both`. Filter
64
92
  the verbose set with `--tools tag:verbose` / `MCP_ENABLED_TAGS=verbose`. See the
65
- agent-utilities *MCP Tool Modes* guide.
93
+ agent-connector-sdk *MCP Tool Modes* guide.
66
94
 
67
95
  ### Available MCP Tools
68
96
 
@@ -84,6 +112,7 @@ _Auto-generated from the live MCP server — do not edit by hand._
84
112
  | `gitlab_graphql` | `GRAPHQLTOOL` | Execute raw GraphQL queries and mutations natively on GitLab. |
85
113
  | `gitlab_graphql_ops` | `GRAPHQL_OPSTOOL` | Run a typed GitLab GraphQL operation by name. |
86
114
  | `gitlab_groups` | `GROUPSTOOL` | Manage gitlab groups operations. |
115
+ | `gitlab_ingest_pipelines` | `MISCTOOL` | Natively ingest GitLab CI pipeline runs (+ jobs) into epistemic-graph. |
87
116
  | `gitlab_ingest_projects` | `MISCTOOL` | Natively ingest GitLab projects into epistemic-graph as typed :Project nodes. |
88
117
  | `gitlab_instances` | `MISCTOOL` | List the configured GitLab tenants (CONCEPT:AU-KG.backend.declared-columns-so-schema). |
89
118
  | `gitlab_issues` | `ISSUESTOOL` | Manage GitLab issues. |
@@ -314,16 +343,16 @@ _Auto-generated from the live MCP server — do not edit by hand._
314
343
 
315
344
  </details>
316
345
 
317
- _33 action-routed tool(s) (default) · 196 verbose 1:1 tool(s). Each is enabled unless its `<DOMAIN>TOOL` toggle is set false; `MCP_TOOL_MODE` selects the surface (`condensed` default · `verbose` 1:1 · `both`). Auto-generated — do not edit._
346
+ _34 action-routed tool(s) (default) · 196 verbose 1:1 tool(s). Each is enabled unless its `<DOMAIN>TOOL` toggle is set false; `MCP_TOOL_MODE` selects the surface (`condensed` default · `verbose` 1:1 · `both`). Auto-generated — do not edit._
318
347
  <!-- MCP-TOOLS-TABLE:END -->
319
348
 
320
- Detailed tool schemas, parameter shapes, and validation constraints are preserved in [docs/mcp.md](docs/mcp.md).
349
+ Detailed tool schemas, parameter shapes, and validation constraints are preserved in [docs/usage.md](docs/usage.md).
321
350
 
322
351
  ### Dynamic Tool Selection & Visibility
323
352
 
324
- This MCP server supports dynamic toolset selection and visibility filtering at runtime. This allows you to restrict the set of exposed tools in order to prevent blowing up the LLM's context window.
353
+ This MCP server supports dynamic toolset selection and visibility filtering at runtime. This allows the operator to restrict the set of exposed tools to prevent blowing up the LLM's context window.
325
354
 
326
- You can configure tool filtering via multiple input channels:
355
+ The operator can configure tool filtering via multiple input channels:
327
356
 
328
357
  - **CLI Arguments:** Pass `--tools` or `--toolsets` (or their disabled counterparts `--disabled-tools` and `--disabled-toolsets`) during startup.
329
358
  - **Environment Variables:** Define standard environment variables:
@@ -332,7 +361,7 @@ You can configure tool filtering via multiple input channels:
332
361
  - **HTTP SSE Request Headers:** Pass custom headers during transport initialization:
333
362
  - `x-mcp-enabled-tools` / `x-mcp-disabled-tools`
334
363
  - `x-mcp-enabled-tags` / `x-mcp-disabled-tags`
335
- - **HTTP SSE Request Query Parameters:** Append query parameters directly to your transport connection URL:
364
+ - **HTTP SSE Request Query Parameters:** Append query parameters directly to the operator's transport connection URL:
336
365
  - `?tools=tool1,tool2`
337
366
  - `?tags=tag1`
338
367
 
@@ -344,11 +373,10 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
344
373
 
345
374
  <!-- MCP-CONFIG-EXAMPLES:START -->
346
375
 
347
- > **Install the slim `[mcp]` extra.** All examples install `gitlab-api[mcp]` — the
348
- > MCP-server extra that pulls only the FastMCP / FastAPI tooling (`agent-utilities[mcp]`).
349
- > It deliberately **excludes** the heavy agent runtime (`pydantic-ai`, the epistemic-graph
350
- > engine, `dspy`, `llama-index`), so `uvx` / container installs are far smaller. Use the
351
- > full `[agent]` extra only when you need the integrated Pydantic AI agent.
376
+ > **Install the connector-focused `[mcp]` extra.** Examples use `gitlab-api[mcp]` to add
377
+ > FastMCP / FastAPI through `agent-connector-sdk`; the required Agent Connector SDK core
378
+ > still carries `epistemic-graph[full]`. The `[agent-runtime]` extra additionally
379
+ > enables model orchestration.
352
380
 
353
381
  #### stdio Transport (local IDEs — Cursor, Claude Desktop, VS Code)
354
382
 
@@ -363,7 +391,7 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
363
391
  "gitlab-mcp"
364
392
  ],
365
393
  "env": {
366
- "MCP_TOOL_MODE": "condensed",
394
+ "MCP_TOOL_MODE": "intent",
367
395
  "BRANCHESTOOL": "True",
368
396
  "COMMITSTOOL": "True",
369
397
  "CUSTOM_APITOOL": "True",
@@ -403,6 +431,10 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
403
431
  }
404
432
  ```
405
433
 
434
+ Runtime references require an alias-aware launcher such as Arbora. Other
435
+ launchers must omit those entries and inject the resolved values through their
436
+ own runtime secret boundary.
437
+
406
438
  #### Streamable-HTTP Transport (networked / production)
407
439
 
408
440
  ```json
@@ -421,9 +453,9 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
421
453
  ],
422
454
  "env": {
423
455
  "TRANSPORT": "streamable-http",
424
- "HOST": "0.0.0.0",
456
+ "HOST": "127.0.0.1",
425
457
  "PORT": "8000",
426
- "MCP_TOOL_MODE": "condensed",
458
+ "MCP_TOOL_MODE": "intent",
427
459
  "BRANCHESTOOL": "True",
428
460
  "COMMITSTOOL": "True",
429
461
  "CUSTOM_APITOOL": "True",
@@ -475,16 +507,18 @@ Alternatively, connect to a pre-deployed Streamable-HTTP instance by `url`:
475
507
  }
476
508
  ```
477
509
 
478
- Deploying the Streamable-HTTP server via Docker:
510
+ Run a reviewed container image as a least-privilege stdio child (no
511
+ listener or published port):
479
512
 
480
513
  ```bash
481
- docker run -d \
482
- --name gitlab-mcp-mcp \
483
- -p 8000:8000 \
484
- -e TRANSPORT=streamable-http \
485
- -e HOST=0.0.0.0 \
486
- -e PORT=8000 \
487
- -e MCP_TOOL_MODE=condensed \
514
+ docker run -i --rm \
515
+ --read-only \
516
+ --cap-drop=ALL \
517
+ --security-opt=no-new-privileges \
518
+ --pids-limit=256 \
519
+ --tmpfs /tmp:rw,noexec,nosuid,nodev,size=64m \
520
+ -e TRANSPORT=stdio \
521
+ -e MCP_TOOL_MODE=intent \
488
522
  -e BRANCHESTOOL=True \
489
523
  -e COMMITSTOOL=True \
490
524
  -e CUSTOM_APITOOL=True \
@@ -518,25 +552,30 @@ docker run -d \
518
552
  -e USERSTOOL=True \
519
553
  -e VULNERABILITIESTOOL=True \
520
554
  -e WIKITOOL=True \
521
- knucklessg1/gitlab-api:mcp
555
+ registry.example.invalid/gitlab-api@sha256:<digest> gitlab-mcp
522
556
  ```
523
557
 
558
+ For containerized network HTTP, supply an authenticated TLS ingress (or
559
+ direct server TLS), exact `MCP_ALLOWED_HOSTS`, and an exact trusted-proxy
560
+ CIDR policy through the operator-owned deployment profile. The generator
561
+ does not emit an unauthenticated non-loopback listener.
562
+
524
563
  _Auto-generated from the code-read env surface (`MCP_TOOL_MODE` + package vars) — do not edit._
525
564
  <!-- MCP-CONFIG-EXAMPLES:END -->
526
565
 
527
566
  <!-- BEGIN GENERATED: additional-deployment-options -->
528
567
  ### Additional Deployment Options
529
568
 
530
- `gitlab-api` can also run as a **local container** (Docker / Podman / `uv`) or be
531
- consumed from a **remote deployment**. The
532
- [Deployment guide](https://knuckles-team.github.io/gitlab-api/deployment/) has full, copy-paste
533
- `mcp_config.json` for all four transports — **stdio**, **streamable-http**,
534
- **local container / uv**, and **remote URL**:
569
+ `gitlab-api` can run as a local stdio process or container, or behind a remote
570
+ network boundary. The
571
+ [Deployment guide](https://knuckles-team.github.io/gitlab-api/deployment/) carries
572
+ the detailed transport contract.
535
573
 
536
- - **Local container / uv** — launch the server from `mcp_config.json` via `uvx`,
537
- `docker run`, or `podman run`, or point at a local streamable-http container by `url`.
538
- - **Remote URL** — connect to a server deployed behind Caddy at
539
- `http://gitlab-mcp.arpa/mcp` using the `"url"` key.
574
+ - **Local container** — launch a reviewed immutable image as a least-privilege
575
+ stdio child with no listener or published port.
576
+ - **Remote URL** — connect through an operator-supplied authenticated HTTPS
577
+ ingress. Keep its URL, outbound identity references, trust profile, and exact
578
+ `MCP_ALLOWED_HOSTS` in `AgentConfig`.
540
579
  <!-- END GENERATED: additional-deployment-options -->
541
580
 
542
581
  ---
@@ -554,15 +593,15 @@ consumed from a **remote deployment**. The
554
593
  | `TRANSPORT` | `stdio` | options: stdio, streamable-http, sse |
555
594
  | `ENABLE_OTEL` | `True` | |
556
595
  | `OTEL_EXPORTER_OTLP_ENDPOINT` | `http://localhost:8080/api/public/otel` | |
557
- | `OTEL_EXPORTER_OTLP_PUBLIC_KEY` | `pk-...` | |
558
- | `OTEL_EXPORTER_OTLP_SECRET_KEY` | `sk-...` | |
596
+ | `OTEL_EXPORTER_OTLP_PUBLIC_KEY` | secret-injected | |
597
+ | `OTEL_EXPORTER_OTLP_SECRET_KEY` | secret-injected | |
559
598
  | `OTEL_EXPORTER_OTLP_PROTOCOL` | `http/protobuf` | |
560
599
  | `EUNOMIA_TYPE` | `none` | options: none, embedded, remote |
561
600
  | `EUNOMIA_POLICY_FILE` | `mcp_policies.json` | |
562
601
  | `EUNOMIA_REMOTE_URL` | `http://eunomia-server:8000` | |
563
602
  | `GITLAB_URL` | `https://gitlab.example.com` | |
564
- | `GITLAB_TOKEN` | `your_gitlab_token_here` | |
565
- | `GITLAB_SSL_VERIFY` | `True` | verify TLS certs; set False for self-signed homelab instances |
603
+ | `GITLAB_TOKEN` | secret-injected | |
604
+ | `GITLAB_TLS_PROFILE` | — | named AgentConfig TLS profile; blank uses the configured default |
566
605
  | `MISCTOOL` | `True` | |
567
606
  | `BRANCHESTOOL` | `True` | |
568
607
  | `PROTECTED_BRANCHESTOOL` | `True` | |
@@ -595,29 +634,29 @@ consumed from a **remote deployment**. The
595
634
  | `GRAPHQLTOOL` | `True` | |
596
635
  | `GRAPHQL_OPSTOOL` | `True` | |
597
636
 
598
- #### Inherited agent-utilities variables (apply to every connector)
637
+ #### Inherited agent-connector-sdk variables (apply to every connector)
599
638
 
600
639
  | Variable | Example | Description |
601
640
  |----------|---------|-------------|
602
- | `MCP_TOOL_MODE` | `condensed` | Tool surface: `condensed` | `verbose` | `both` |
641
+ | `MCP_TOOL_MODE` | `intent` | Tool surface: `intent` \| `condensed` \| `verbose` \| `both` |
603
642
  | `MCP_ENABLED_TOOLS` | — | Comma-separated tool allow-list |
604
643
  | `MCP_DISABLED_TOOLS` | — | Comma-separated tool deny-list |
605
644
  | `MCP_ENABLED_TAGS` | — | Comma-separated tag allow-list |
606
645
  | `MCP_DISABLED_TAGS` | — | Comma-separated tag deny-list |
607
- | `MCP_CLIENT_AUTH` | — | Outbound MCP auth (`oidc-client-credentials` for fleet calls) |
646
+ | `MCP_CLIENT_AUTH` | — | Outbound MCP child auth: `oidc-client-credentials` \| `basic` \| `none` |
608
647
  | `OIDC_CLIENT_ID` | — | OIDC client id (service-account auth) |
609
- | `OIDC_CLIENT_SECRET` | — | OIDC client secret (service-account auth) |
648
+ | `OIDC_CLIENT_SECRET_REF` | `secret://identity/oidc-client-secret` | Runtime secret reference for the OIDC service account |
649
+ | `MCP_BASIC_AUTH_USERNAME` | — | HTTP Basic username (`MCP_CLIENT_AUTH=basic`) |
650
+ | `MCP_BASIC_AUTH_PASSWORD_REF` | `secret://identity/mcp-basic-password` | Runtime secret reference for HTTP Basic auth (`MCP_CLIENT_AUTH=basic`) |
610
651
  | `DEBUG` | `False` | Verbose logging |
611
652
  | `PYTHONUNBUFFERED` | `1` | Unbuffered stdout (recommended in containers) |
612
653
  | `MCP_URL` | `http://localhost:8000/mcp` | URL of the MCP server the agent connects to |
613
654
  | `PROVIDER` | `openai` | LLM provider for the agent |
614
655
  | `MODEL_ID` | `gpt-4o` | Model id for the agent |
615
- | `ENABLE_WEB_UI` | `True` | Serve the AG-UI web interface |
616
656
 
617
- _45 package + 14 inherited variable(s). Auto-generated from `.env.example` + the shared agent-utilities set — do not edit._
657
+ _45 package + 16 inherited variable(s). Auto-generated from `.env.example` + the shared agent-connector-sdk set — do not edit._
618
658
  <!-- ENV-VARS-TABLE:END -->
619
659
 
620
-
621
660
  Every variable the server reads.
622
661
 
623
662
  ### Connection & Credentials
@@ -629,11 +668,11 @@ instances are configured, it falls back to the single-host `GITLAB_*` values bel
629
668
  |----------|-------------|---------|
630
669
  | `GITLAB_URL` | Base GitLab instance URL | `https://gitlab.example.com` |
631
670
  | `GITLAB_TOKEN` | GitLab personal/project access token (`glpat-…`) | — |
632
- | `GITLAB_SSL_VERIFY` | TLS certificate verification | `True` |
671
+ | `GITLAB_TLS_PROFILE` | Optional runtime TLS profile selector | _(unset)_ |
633
672
 
634
673
  > Multiple instances are declared once under `gitlab_instances` in the shared
635
- > agent-utilities XDG config (`~/.config/agent-utilities/config.json`) — each entry has
636
- > `name`, `url`, `token`, and `verify_ssl`. Target a tenant by **name** from the client
674
+ > agent-connector-sdk XDG config (`~/.config/agent-connector-sdk/config.json`) — each entry has
675
+ > `name`, `url`, `token`, and optional `tls_profile`. Target a tenant by **name** from the client
637
676
  > factory; an unset instance resolves to the first configured one (else `GITLAB_URL` /
638
677
  > `GITLAB_TOKEN`).
639
678
 
@@ -665,257 +704,26 @@ The full list is in the [Available MCP Tools](#available-mcp-tools) table above
665
704
  | `EUNOMIA_POLICY_FILE` | Embedded policy file | `mcp_policies.json` |
666
705
  | `EUNOMIA_REMOTE_URL` | Remote Eunomia server URL | — |
667
706
 
668
- ### Agent CLI (full `[agent]` runtime only)
669
- | Variable | Description | Default |
670
- |----------|-------------|---------|
671
- | `MCP_URL` | URL of the MCP server the agent connects to | `http://localhost:8000/mcp` |
672
- | `PROVIDER` | LLM provider (e.g. `openai`) | `openai` |
673
- | `MODEL_ID` | Model id (e.g. `gpt-4o`) | `gpt-4o` |
674
- | `ENABLE_WEB_UI` | Serve the AG-UI web interface | `True` |
675
-
676
- See [`.env.example`](.env.example) for a copy-paste starting point.
677
-
678
707
  ## Agent
679
708
 
680
- This repository features a fully integrated Pydantic AI Graph Agent. It communicates over the **Agent Control Protocol (ACP)** and interacts seamlessly with the **Agent Web UI (AG-UI)** and Terminal interface.
681
-
682
- ### Running the Agent CLI
683
- To start the interactive command-line agent:
684
-
685
- ```bash
686
709
  # Set credentials
687
710
  export GITLAB_URL="your_value"
688
711
  export GITLAB_TOKEN="your_value"
689
712
 
690
- # Run the agent server
691
- gitlab-agent --provider openai --model-id gpt-4o
692
- ```
693
-
694
- ### Docker Compose Orchestration
695
- The following `docker/agent.compose.yml` configures the Agent, Web UI, and Terminal Interface together:
696
-
697
- ```yaml
698
- version: '3.8'
699
-
700
- services:
701
- gitlab-api-mcp:
702
- image: knucklessg1/gitlab-api:mcp
703
- container_name: gitlab-api-mcp
704
- hostname: gitlab-api-mcp
705
- restart: always
706
- env_file:
707
- - ../.env
708
- environment:
709
- - PYTHONUNBUFFERED=1
710
- - HOST=0.0.0.0
711
- - PORT=8000
712
- - TRANSPORT=streamable-http
713
- ports:
714
- - "8000:8000"
715
- healthcheck:
716
- test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
717
- interval: 30s
718
- timeout: 10s
719
- retries: 3
720
- start_period: 10s
721
- logging:
722
- driver: json-file
723
- options:
724
- max-size: "10m"
725
- max-file: "3"
726
-
727
- gitlab-api-agent:
728
- image: knucklessg1/gitlab-api:latest
729
- container_name: gitlab-api-agent
730
- hostname: gitlab-api-agent
731
- restart: always
732
- depends_on:
733
- - gitlab-api-mcp
734
- env_file:
735
- - ../.env
736
- command: [ "gitlab-agent" ]
737
- environment:
738
- - PYTHONUNBUFFERED=1
739
- - HOST=0.0.0.0
740
- - PORT=9017
741
- - MCP_URL=http://gitlab-api-mcp:8000/mcp
742
- - PROVIDER=${PROVIDER:-openai}
743
- - MODEL_ID=${MODEL_ID:-gpt-4o}
744
- - ENABLE_WEB_UI=True
745
- - ENABLE_OTEL=True
746
- ports:
747
- - "9017:9017"
748
- healthcheck:
749
- test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:9017/health')"]
750
- interval: 30s
751
- timeout: 10s
752
- retries: 3
753
- start_period: 10s
754
- logging:
755
- driver: json-file
756
- options:
757
- max-size: "10m"
758
- max-file: "3"
759
-
760
- ```
761
-
762
- Detailed graph node architecture explanations, custom skill configurations, and agentic trace guides are available in [docs/agent.md](docs/agent.md).
763
-
764
- ---
765
-
766
- ## Multi-Tenancy (multiple GitLab instances)
767
-
768
- The client is natively multi-tenant. The set of instances is declared once in the
769
- shared **agent-utilities XDG config** (`~/.config/agent-utilities/config.json`) under
770
- `gitlab_instances` — the **same** list the Knowledge-Graph GitLab indexer reads, so one
771
- config drives both code/metadata indexing and every API/MCP call:
772
-
773
- ```json
774
- {
775
- "gitlab_instances": [
776
- {"name": "internal", "url": "https://gitlab.arpa", "token": "glpat-xxxx", "verify_ssl": false},
777
- {"name": "public", "url": "https://gitlab.com", "token": "glpat-yyyy", "verify_ssl": true}
778
- ]
779
- }
780
- ```
781
-
782
- Target a tenant by **name** from the client factory; a bare URL still works, and an
783
- unset instance resolves to the first configured one (else `GITLAB_URL`/`GITLAB_TOKEN`):
784
-
785
- ```python
786
- from gitlab_api.auth import get_client
787
- from gitlab_api.instances import list_configured_instances
788
-
789
- internal = get_client(instance="internal") # resolves url+token+verify from config
790
- public = get_client(instance="public")
791
- default = get_client() # first configured / GITLAB_URL fallback
792
- names = [i.name for i in list_configured_instances()]
793
- ```
794
-
795
- The MCP server exposes a `gitlab_instances` tool (`action=list|get`) to discover the
796
- configured tenants (tokens are never returned). When no instances are configured, the
797
- connector falls back to the single-host `GITLAB_URL`/`GITLAB_TOKEN` it has always used.
798
-
799
- ## Security & Governance
800
-
801
- Built directly upon the enterprise-ready [`agent-utilities`](https://github.com/Knuckles-Team/agent-utilities) core, standard security parameters are fully supported:
802
-
803
- ### Access Control & Policy Enforcement
804
- - **Eunomia Policies:** Fine-grained, policy-driven tool authorization. Supports `none`, local `embedded` (`mcp_policies.json`), or centralized `remote` modes.
805
- - **OIDC Token Delegation:** Compliant with RFC 8693 token exchange for flowing authenticating user credentials from Web UI / ACP → Agent → MCP.
806
- - **Scoped Credentials:** Execution context runs restricted to the specific caller identity.
807
-
808
- ### Runtime Security Grid
809
- | Feature | Functionality | Enablement |
810
- |---------|---------------|------------|
811
- | **Tool Guard** | Sensitivity inspection with human-in-the-loop validation | Enabled by default |
812
- | **Prompt Injection Defense** | Input scanning, repetition monitoring, and recursive loop blocks | Enabled by default |
813
- | **Context Safety Guard** | Stuck-loop detectors and contextual overflow preemptive alerts | Enabled by default |
814
-
815
- ---
816
-
817
- ## Installation
818
-
819
- Pick the extra that matches what you want to run:
820
-
821
- | Extra | Installs | Use when |
822
- |-------|----------|----------|
823
- | `gitlab-api[mcp]` | Slim MCP server only (`agent-utilities[mcp]` — FastMCP/FastAPI) | You only run the **MCP server** (smallest install / image) |
824
- | `gitlab-api[agent]` | Full agent runtime (`agent-utilities[agent,logfire]` — Pydantic AI + the epistemic-graph engine) | You run the **integrated agent** |
825
- | `gitlab-api[all]` | Everything (`mcp` + `agent` + `gql` + `logfire`) | Development / both surfaces |
826
-
827
- ```bash
828
- # MCP server only (recommended for tool hosting — slim deps)
713
+ # Connector-focused MCP server (includes the shared graph engine)
829
714
  uv pip install "gitlab-api[mcp]"
830
715
 
831
- # Full agent runtime (Pydantic AI + epistemic-graph engine)
832
- uv pip install "gitlab-api[agent]"
833
-
834
716
  # Everything (development)
835
717
  uv pip install "gitlab-api[all]" # or: python -m pip install "gitlab-api[all]"
836
718
  ```
837
719
 
838
- ### Container images (`:mcp` vs `:agent`)
720
+ ### Container images (`:mcp`)
839
721
 
840
- One multi-stage `docker/Dockerfile` builds two right-sized images, selected by `--target`:
722
+ One multi-stage `docker/Dockerfile` builds the MCP-only image (`--target mcp`):
841
723
 
842
724
  | Image tag | Build target | Contents | Entrypoint |
843
725
  |-----------|--------------|----------|------------|
844
- | `knucklessg1/gitlab-api:mcp` | `--target mcp` | `gitlab-api[mcp]` — **slim**, no engine/`pydantic-ai`/`dspy`/`llama-index`/`tree-sitter` | `gitlab-mcp` |
845
- | `knucklessg1/gitlab-api:latest` | `--target agent` (default) | `gitlab-api[agent]` — **full** agent runtime + epistemic-graph engine | `gitlab-agent` |
726
+ | `example/gitlab-api:mcp` | `--target mcp` | `gitlab-api[mcp]` — **connector-focused**, includes `epistemic-graph[full]`; no model-orchestration stack | `gitlab-mcp` |
846
727
 
847
728
  ```bash
848
- docker build --target mcp -t knucklessg1/gitlab-api:mcp docker/ # slim MCP server
849
- docker build --target agent -t knucklessg1/gitlab-api:latest docker/ # full agent
850
- ```
851
-
852
- `docker/mcp.compose.yml` runs the slim `:mcp` server; `docker/agent.compose.yml` runs the
853
- agent (`:latest`) with a co-located `:mcp` sidecar.
854
-
855
- ### Knowledge-graph database (`epistemic-graph`)
856
-
857
- The **full agent** (`[agent]` / `:latest`) embeds the **epistemic-graph** engine (pulled in
858
- transitively via `agent-utilities[agent]`). For production — or to share one knowledge graph
859
- across multiple agents — run **epistemic-graph as its own database container** and point the
860
- agent at it instead of embedding it. Deployment recipes (single-node + Raft HA), connection
861
- config, and the full database architecture (with diagrams) are documented in the
862
- [epistemic-graph deployment guide](https://knuckles-team.github.io/epistemic-graph/deployment/).
863
- The slim `[mcp]` server does **not** require the database.
864
-
865
- ---
866
-
867
- ## Documentation
868
-
869
- The complete documentation is published as the
870
- [official documentation site](https://knuckles-team.github.io/gitlab-api/) and is the
871
- recommended reference for installation, deployment, and day-to-day operation.
872
-
873
- | Page | Contents |
874
- |---|---|
875
- | [Installation](https://knuckles-team.github.io/gitlab-api/installation/) | pip, source, extras, prebuilt Docker image |
876
- | [Deployment](https://knuckles-team.github.io/gitlab-api/deployment/) | run the MCP and agent servers, Compose, Caddy + Technitium, env config |
877
- | [Usage](https://knuckles-team.github.io/gitlab-api/usage/) | the MCP tools, the `Api` client, the CLI |
878
- | [Backing Platform](https://knuckles-team.github.io/gitlab-api/platform/) | deploy GitLab with Docker |
879
- | [Overview](https://knuckles-team.github.io/gitlab-api/overview/) | the action-routed tool surface and architecture |
880
- | [Concepts](https://knuckles-team.github.io/gitlab-api/concepts/) | concept registry (`CONCEPT:GL-*`) |
881
-
882
- ---
883
-
884
- ## Repository Owners
885
-
886
- <img width="100%" height="180em" src="https://github-readme-stats.vercel.app/api?username=Knucklessg1&show_icons=true&hide_border=true&&count_private=true&include_all_commits=true" />
887
-
888
- ![GitHub followers](https://img.shields.io/github/followers/Knucklessg1)
889
- ![GitHub User's stars](https://img.shields.io/github/stars/Knucklessg1)
890
-
891
- ---
892
-
893
- ## Contribute
894
-
895
- Contributions are welcome! Please ensure code quality by executing local checks before submitting pull requests:
896
- - Format code using `ruff format .`
897
- - Lint code using `ruff check .`
898
- - Validate type-safety with `mypy .`
899
- - Execute test suites using `pytest`
900
-
901
-
902
- <!-- BEGIN agent-os-genesis-deploy (generated; do not edit between markers) -->
903
-
904
- ## Deploy with `agent-os-genesis`
905
-
906
- This package can be provisioned for you — skill-guided — by the **`agent-os-genesis`**
907
- universal skill (its *single-package deploy mode*): it picks your install method, seeds
908
- secrets to OpenBao/Vault (or `.env`), trusts your enterprise CA, registers the MCP
909
- server, and verifies it — the same machinery that stands up the whole Agent OS, narrowed
910
- to just this package. Ask your agent to **"deploy `gitlab-api` with agent-os-genesis"**.
911
-
912
- | Install mode | Command |
913
- |------|---------|
914
- | Bare-metal, prod (PyPI) | `uvx gitlab-mcp` · or `uv tool install gitlab-api` |
915
- | Bare-metal, dev (editable) | `uv pip install -e ".[all]"` · or `pip install -e ".[all]"` |
916
- | Container, prod | deploy `knucklessg1/gitlab-api:latest` via docker-compose / swarm / podman / podman-compose / kubernetes |
917
- | Container, dev (editable) | deploy `docker/compose.dev.yml` (source-mounted at `/src`; edits live on restart) |
918
-
919
- Secrets are read-existing + seeded via `vault_sync` — you are only prompted for what's missing.
920
-
921
- <!-- END agent-os-genesis-deploy -->
729
+ docker build --target mcp -t example/gitlab-api:mcp docker/ # connector-focused MCP server