gitlab-api 26.4.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.
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/LICENSE +1 -1
- gitlab_api-26.4.0/README.md → gitlab_api-27.3.1/PKG-INFO +97 -290
- gitlab_api-26.4.0/PKG-INFO → gitlab_api-27.3.1/README.md +67 -322
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/__init__.py +32 -21
- gitlab_api-27.3.1/gitlab_api/__main__.py +4 -0
- gitlab_api-27.3.1/gitlab_api/api/api_client_base.py +242 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_environments.py +6 -42
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_issues.py +3 -33
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_merge_requests.py +3 -17
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_other.py +3 -35
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_pipelines.py +3 -41
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_projects.py +35 -70
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_repositories.py +3 -59
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_system.py +4 -6
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_users_groups.py +11 -31
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_vulnerabilities.py +11 -9
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/api_client.py +2 -3
- gitlab_api-27.3.1/gitlab_api/auth.py +233 -0
- gitlab_api-27.3.1/gitlab_api/connector_manifest.yml +439 -0
- gitlab_api-27.3.1/gitlab_api/connector_prep.py +1720 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/connectors/mcp_source_presets.json +5 -5
- gitlab_api-27.3.1/gitlab_api/connectors/tool_schema_fingerprints.json +8 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/gitlab_gql.py +100 -44
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/gitlab_input_models.py +165 -257
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/gitlab_response_models.py +2 -5
- gitlab_api-27.3.1/gitlab_api/instances.py +156 -0
- gitlab_api-27.3.1/gitlab_api/kg_ingest.py +295 -0
- gitlab_api-27.3.1/gitlab_api/mcp_server.py +1382 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/ontology/__init__.py +2 -2
- gitlab_api-27.3.1/gitlab_api/ontology/certification.json +36 -0
- gitlab_api-27.3.1/gitlab_api/ontology/fixtures/records.json +21 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/ontology/gitlab.ttl +1 -1
- gitlab_api-27.3.1/gitlab_api/ontology/ingest_sources.json +19 -0
- gitlab_api-27.3.1/gitlab_api/ontology/mappings/source.yaml +20 -0
- gitlab_api-27.3.1/gitlab_api/ontology/migrations/manifest.json +6 -0
- gitlab_api-27.3.1/gitlab_api/ontology/shapes/connector.shacl.ttl +284 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/prompts/devops_specialist.json +1 -1
- gitlab_api-27.3.1/gitlab_api/skills/gitlab-api-operations/SKILL.md +33 -0
- gitlab_api-27.3.1/gitlab_api/skills/gitlab-api-operations/agents/openai.yaml +4 -0
- gitlab_api-27.3.1/gitlab_api/skills/gitlab-api-operations/references/catalog.md +9 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/skills/gitlab-issues/SKILL.md +3 -3
- gitlab_api-27.3.1/gitlab_api/skills/gitlab-issues/WORKFLOW.md +75 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/skills/gitlab-merge-request-create/SKILL.md +2 -2
- gitlab_api-27.3.1/gitlab_api/skills/gitlab-merge-request-create/WORKFLOW.md +66 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/skills/gitlab-merge-request-review/SKILL.md +6 -6
- gitlab_api-27.3.1/gitlab_api/skills/gitlab-merge-request-review/WORKFLOW.md +115 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/skills/gitlab-pipelines/SKILL.md +5 -5
- gitlab_api-27.3.1/gitlab_api/skills/gitlab-pipelines/WORKFLOW.md +89 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/skills/gitlab-vulnerabilities/SKILL.md +4 -4
- gitlab_api-27.3.1/gitlab_api/skills/gitlab-vulnerabilities/WORKFLOW.md +94 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api.egg-info/PKG-INFO +81 -306
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api.egg-info/SOURCES.txt +23 -39
- gitlab_api-27.3.1/gitlab_api.egg-info/entry_points.txt +14 -0
- gitlab_api-27.3.1/gitlab_api.egg-info/requires.txt +18 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api.egg-info/top_level.txt +3 -0
- gitlab_api-27.3.1/pyproject.toml +82 -0
- gitlab_api-27.3.1/requirements.txt +1 -0
- gitlab_api-27.3.1/scripts/check_import_safety.py +302 -0
- gitlab_api-27.3.1/scripts/security_contract.py +748 -0
- gitlab_api-27.3.1/scripts/security_sanitizer.py +326 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/scripts/verify_api_integration.py +156 -112
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/tests/test_api_wrapper.py +2 -2
- gitlab_api-27.3.1/tests/test_auth.py +129 -0
- gitlab_api-27.3.1/tests/test_connector_prep.py +337 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/tests/test_gitlab_a2a_validation.py +32 -26
- gitlab_api-27.3.1/tests/test_gitlab_api_brute_force_coverage.py +449 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/tests/test_gitlab_gql.py +49 -31
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/tests/test_gitlab_mcp_validation.py +1 -1
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/tests/test_gitlab_models.py +510 -510
- gitlab_api-27.3.1/tests/test_identity_context_scoping.py +71 -0
- gitlab_api-27.3.1/tests/test_ingest_sources.py +35 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/tests/test_instances.py +24 -11
- gitlab_api-27.3.1/tests/test_kg_ingest.py +202 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/tests/test_mock_coverage.py +11 -80
- gitlab_api-27.3.1/tests/test_security_sanitizer.py +30 -0
- gitlab_api-27.3.1/tests/test_startup.py +0 -0
- gitlab_api-27.3.1/tests/test_tool_modes.py +24 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/tests/test_verify_agent.py +1 -1
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/tests/verify_a2a_queries.py +21 -11
- gitlab_api-26.4.0/gitlab_api/__main__.py +0 -4
- gitlab_api-26.4.0/gitlab_api/agent_server.py +0 -83
- gitlab_api-26.4.0/gitlab_api/api/api_client_base.py +0 -214
- gitlab_api-26.4.0/gitlab_api/auth.py +0 -180
- gitlab_api-26.4.0/gitlab_api/instances.py +0 -110
- gitlab_api-26.4.0/gitlab_api/kg_ingest.py +0 -269
- gitlab_api-26.4.0/gitlab_api/main_agent.json +0 -18
- gitlab_api-26.4.0/gitlab_api/mcp/__init__.py +0 -71
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_branches.py +0 -59
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_commits.py +0 -93
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_custom_api.py +0 -47
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_deploy_tokens.py +0 -77
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_environments.py +0 -89
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_epics.py +0 -59
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_graphql.py +0 -86
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_graphql_ops.py +0 -93
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_groups.py +0 -72
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_issues.py +0 -63
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_jobs.py +0 -76
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_labels.py +0 -59
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_members.py +0 -53
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_merge_requests.py +0 -65
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_merge_rules.py +0 -100
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_milestones.py +0 -59
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_misc.py +0 -10
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_namespaces.py +0 -53
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_notes.py +0 -59
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_packages.py +0 -55
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_pipeline_schedules.py +0 -88
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_pipelines.py +0 -53
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_projects.py +0 -90
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_protected_branches.py +0 -63
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_releases.py +0 -87
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_runners.py +0 -100
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_snippets.py +0 -59
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_tags.py +0 -75
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_users.py +0 -61
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_vulnerabilities.py +0 -59
- gitlab_api-26.4.0/gitlab_api/mcp/mcp_wiki.py +0 -63
- gitlab_api-26.4.0/gitlab_api/mcp_server.py +0 -2016
- gitlab_api-26.4.0/gitlab_api/prompts/main_agent.json +0 -18
- gitlab_api-26.4.0/gitlab_api.egg-info/entry_points.txt +0 -15
- gitlab_api-26.4.0/gitlab_api.egg-info/requires.txt +0 -21
- gitlab_api-26.4.0/pyproject.toml +0 -72
- gitlab_api-26.4.0/requirements.txt +0 -1
- gitlab_api-26.4.0/scripts/security_sanitizer.py +0 -160
- gitlab_api-26.4.0/scripts/validate_a2a_agent.py +0 -139
- gitlab_api-26.4.0/scripts/validate_agent.py +0 -62
- gitlab_api-26.4.0/tests/test_action_discovery.py +0 -70
- gitlab_api-26.4.0/tests/test_auth.py +0 -105
- gitlab_api-26.4.0/tests/test_concept_parity.py +0 -87
- gitlab_api-26.4.0/tests/test_gitlab_api_brute_force_coverage.py +0 -411
- gitlab_api-26.4.0/tests/test_kg_ingest.py +0 -182
- gitlab_api-26.4.0/tests/test_startup.py +0 -12
- gitlab_api-26.4.0/tests/test_tool_modes.py +0 -42
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/MANIFEST.in +0 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/api/__init__.py +0 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/connectors/__init__.py +0 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/mcp_config.json +0 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/prompts/__init__.py +0 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api/skills/__init__.py +0 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/gitlab_api.egg-info/dependency_links.txt +0 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/setup.cfg +0 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/tests/__init__.py +0 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/tests/conftest.py +0 -0
- {gitlab_api-26.4.0 → gitlab_api-27.3.1}/tests/test_init_dynamics.py +0 -0
|
@@ -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
|
|
32
|
+
## CLI or API | MCP
|
|
3
33
|
|
|
4
34
|

|
|
5
35
|

|
|
@@ -20,10 +50,9 @@
|
|
|
20
50
|

|
|
21
51
|

|
|
22
52
|
|
|
23
|
-
*Version:
|
|
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
|
|
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:**
|
|
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
|
|
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
|
|
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-
|
|
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-
|
|
93
|
+
agent-connector-sdk *MCP Tool Modes* guide.
|
|
66
94
|
|
|
67
95
|
### Available MCP Tools
|
|
68
96
|
|
|
@@ -318,13 +346,13 @@ _Auto-generated from the live MCP server — do not edit by hand._
|
|
|
318
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._
|
|
319
347
|
<!-- MCP-TOOLS-TABLE:END -->
|
|
320
348
|
|
|
321
|
-
Detailed tool schemas, parameter shapes, and validation constraints are preserved in [docs/
|
|
349
|
+
Detailed tool schemas, parameter shapes, and validation constraints are preserved in [docs/usage.md](docs/usage.md).
|
|
322
350
|
|
|
323
351
|
### Dynamic Tool Selection & Visibility
|
|
324
352
|
|
|
325
|
-
This MCP server supports dynamic toolset selection and visibility filtering at runtime. This allows
|
|
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.
|
|
326
354
|
|
|
327
|
-
|
|
355
|
+
The operator can configure tool filtering via multiple input channels:
|
|
328
356
|
|
|
329
357
|
- **CLI Arguments:** Pass `--tools` or `--toolsets` (or their disabled counterparts `--disabled-tools` and `--disabled-toolsets`) during startup.
|
|
330
358
|
- **Environment Variables:** Define standard environment variables:
|
|
@@ -333,7 +361,7 @@ You can configure tool filtering via multiple input channels:
|
|
|
333
361
|
- **HTTP SSE Request Headers:** Pass custom headers during transport initialization:
|
|
334
362
|
- `x-mcp-enabled-tools` / `x-mcp-disabled-tools`
|
|
335
363
|
- `x-mcp-enabled-tags` / `x-mcp-disabled-tags`
|
|
336
|
-
- **HTTP SSE Request Query Parameters:** Append query parameters directly to
|
|
364
|
+
- **HTTP SSE Request Query Parameters:** Append query parameters directly to the operator's transport connection URL:
|
|
337
365
|
- `?tools=tool1,tool2`
|
|
338
366
|
- `?tags=tag1`
|
|
339
367
|
|
|
@@ -345,11 +373,10 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
|
|
|
345
373
|
|
|
346
374
|
<!-- MCP-CONFIG-EXAMPLES:START -->
|
|
347
375
|
|
|
348
|
-
> **Install the
|
|
349
|
-
>
|
|
350
|
-
>
|
|
351
|
-
>
|
|
352
|
-
> 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.
|
|
353
380
|
|
|
354
381
|
#### stdio Transport (local IDEs — Cursor, Claude Desktop, VS Code)
|
|
355
382
|
|
|
@@ -364,7 +391,7 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
|
|
|
364
391
|
"gitlab-mcp"
|
|
365
392
|
],
|
|
366
393
|
"env": {
|
|
367
|
-
"MCP_TOOL_MODE": "
|
|
394
|
+
"MCP_TOOL_MODE": "intent",
|
|
368
395
|
"BRANCHESTOOL": "True",
|
|
369
396
|
"COMMITSTOOL": "True",
|
|
370
397
|
"CUSTOM_APITOOL": "True",
|
|
@@ -404,6 +431,10 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
|
|
|
404
431
|
}
|
|
405
432
|
```
|
|
406
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
|
+
|
|
407
438
|
#### Streamable-HTTP Transport (networked / production)
|
|
408
439
|
|
|
409
440
|
```json
|
|
@@ -422,9 +453,9 @@ When query strings or parameters are supplied, an LLM-free **Knowledge Graph res
|
|
|
422
453
|
],
|
|
423
454
|
"env": {
|
|
424
455
|
"TRANSPORT": "streamable-http",
|
|
425
|
-
"HOST": "
|
|
456
|
+
"HOST": "127.0.0.1",
|
|
426
457
|
"PORT": "8000",
|
|
427
|
-
"MCP_TOOL_MODE": "
|
|
458
|
+
"MCP_TOOL_MODE": "intent",
|
|
428
459
|
"BRANCHESTOOL": "True",
|
|
429
460
|
"COMMITSTOOL": "True",
|
|
430
461
|
"CUSTOM_APITOOL": "True",
|
|
@@ -476,16 +507,18 @@ Alternatively, connect to a pre-deployed Streamable-HTTP instance by `url`:
|
|
|
476
507
|
}
|
|
477
508
|
```
|
|
478
509
|
|
|
479
|
-
|
|
510
|
+
Run a reviewed container image as a least-privilege stdio child (no
|
|
511
|
+
listener or published port):
|
|
480
512
|
|
|
481
513
|
```bash
|
|
482
|
-
docker run -
|
|
483
|
-
--
|
|
484
|
-
-
|
|
485
|
-
-
|
|
486
|
-
-
|
|
487
|
-
|
|
488
|
-
-e
|
|
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 \
|
|
489
522
|
-e BRANCHESTOOL=True \
|
|
490
523
|
-e COMMITSTOOL=True \
|
|
491
524
|
-e CUSTOM_APITOOL=True \
|
|
@@ -519,25 +552,30 @@ docker run -d \
|
|
|
519
552
|
-e USERSTOOL=True \
|
|
520
553
|
-e VULNERABILITIESTOOL=True \
|
|
521
554
|
-e WIKITOOL=True \
|
|
522
|
-
|
|
555
|
+
registry.example.invalid/gitlab-api@sha256:<digest> gitlab-mcp
|
|
523
556
|
```
|
|
524
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
|
+
|
|
525
563
|
_Auto-generated from the code-read env surface (`MCP_TOOL_MODE` + package vars) — do not edit._
|
|
526
564
|
<!-- MCP-CONFIG-EXAMPLES:END -->
|
|
527
565
|
|
|
528
566
|
<!-- BEGIN GENERATED: additional-deployment-options -->
|
|
529
567
|
### Additional Deployment Options
|
|
530
568
|
|
|
531
|
-
`gitlab-api` can
|
|
532
|
-
|
|
533
|
-
[Deployment guide](https://knuckles-team.github.io/gitlab-api/deployment/)
|
|
534
|
-
|
|
535
|
-
**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.
|
|
536
573
|
|
|
537
|
-
- **Local container
|
|
538
|
-
|
|
539
|
-
- **Remote URL** — connect
|
|
540
|
-
|
|
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`.
|
|
541
579
|
<!-- END GENERATED: additional-deployment-options -->
|
|
542
580
|
|
|
543
581
|
---
|
|
@@ -555,15 +593,15 @@ consumed from a **remote deployment**. The
|
|
|
555
593
|
| `TRANSPORT` | `stdio` | options: stdio, streamable-http, sse |
|
|
556
594
|
| `ENABLE_OTEL` | `True` | |
|
|
557
595
|
| `OTEL_EXPORTER_OTLP_ENDPOINT` | `http://localhost:8080/api/public/otel` | |
|
|
558
|
-
| `OTEL_EXPORTER_OTLP_PUBLIC_KEY` |
|
|
559
|
-
| `OTEL_EXPORTER_OTLP_SECRET_KEY` |
|
|
596
|
+
| `OTEL_EXPORTER_OTLP_PUBLIC_KEY` | secret-injected | |
|
|
597
|
+
| `OTEL_EXPORTER_OTLP_SECRET_KEY` | secret-injected | |
|
|
560
598
|
| `OTEL_EXPORTER_OTLP_PROTOCOL` | `http/protobuf` | |
|
|
561
599
|
| `EUNOMIA_TYPE` | `none` | options: none, embedded, remote |
|
|
562
600
|
| `EUNOMIA_POLICY_FILE` | `mcp_policies.json` | |
|
|
563
601
|
| `EUNOMIA_REMOTE_URL` | `http://eunomia-server:8000` | |
|
|
564
602
|
| `GITLAB_URL` | `https://gitlab.example.com` | |
|
|
565
|
-
| `GITLAB_TOKEN` |
|
|
566
|
-
| `
|
|
603
|
+
| `GITLAB_TOKEN` | secret-injected | |
|
|
604
|
+
| `GITLAB_TLS_PROFILE` | — | named AgentConfig TLS profile; blank uses the configured default |
|
|
567
605
|
| `MISCTOOL` | `True` | |
|
|
568
606
|
| `BRANCHESTOOL` | `True` | |
|
|
569
607
|
| `PROTECTED_BRANCHESTOOL` | `True` | |
|
|
@@ -596,29 +634,29 @@ consumed from a **remote deployment**. The
|
|
|
596
634
|
| `GRAPHQLTOOL` | `True` | |
|
|
597
635
|
| `GRAPHQL_OPSTOOL` | `True` | |
|
|
598
636
|
|
|
599
|
-
#### Inherited agent-
|
|
637
|
+
#### Inherited agent-connector-sdk variables (apply to every connector)
|
|
600
638
|
|
|
601
639
|
| Variable | Example | Description |
|
|
602
640
|
|----------|---------|-------------|
|
|
603
|
-
| `MCP_TOOL_MODE` | `
|
|
641
|
+
| `MCP_TOOL_MODE` | `intent` | Tool surface: `intent` \| `condensed` \| `verbose` \| `both` |
|
|
604
642
|
| `MCP_ENABLED_TOOLS` | — | Comma-separated tool allow-list |
|
|
605
643
|
| `MCP_DISABLED_TOOLS` | — | Comma-separated tool deny-list |
|
|
606
644
|
| `MCP_ENABLED_TAGS` | — | Comma-separated tag allow-list |
|
|
607
645
|
| `MCP_DISABLED_TAGS` | — | Comma-separated tag deny-list |
|
|
608
|
-
| `MCP_CLIENT_AUTH` | — | Outbound MCP auth
|
|
646
|
+
| `MCP_CLIENT_AUTH` | — | Outbound MCP child auth: `oidc-client-credentials` \| `basic` \| `none` |
|
|
609
647
|
| `OIDC_CLIENT_ID` | — | OIDC client id (service-account auth) |
|
|
610
|
-
| `
|
|
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`) |
|
|
611
651
|
| `DEBUG` | `False` | Verbose logging |
|
|
612
652
|
| `PYTHONUNBUFFERED` | `1` | Unbuffered stdout (recommended in containers) |
|
|
613
653
|
| `MCP_URL` | `http://localhost:8000/mcp` | URL of the MCP server the agent connects to |
|
|
614
654
|
| `PROVIDER` | `openai` | LLM provider for the agent |
|
|
615
655
|
| `MODEL_ID` | `gpt-4o` | Model id for the agent |
|
|
616
|
-
| `ENABLE_WEB_UI` | `True` | Serve the AG-UI web interface |
|
|
617
656
|
|
|
618
|
-
_45 package +
|
|
657
|
+
_45 package + 16 inherited variable(s). Auto-generated from `.env.example` + the shared agent-connector-sdk set — do not edit._
|
|
619
658
|
<!-- ENV-VARS-TABLE:END -->
|
|
620
659
|
|
|
621
|
-
|
|
622
660
|
Every variable the server reads.
|
|
623
661
|
|
|
624
662
|
### Connection & Credentials
|
|
@@ -630,11 +668,11 @@ instances are configured, it falls back to the single-host `GITLAB_*` values bel
|
|
|
630
668
|
|----------|-------------|---------|
|
|
631
669
|
| `GITLAB_URL` | Base GitLab instance URL | `https://gitlab.example.com` |
|
|
632
670
|
| `GITLAB_TOKEN` | GitLab personal/project access token (`glpat-…`) | — |
|
|
633
|
-
| `
|
|
671
|
+
| `GITLAB_TLS_PROFILE` | Optional runtime TLS profile selector | _(unset)_ |
|
|
634
672
|
|
|
635
673
|
> Multiple instances are declared once under `gitlab_instances` in the shared
|
|
636
|
-
> agent-
|
|
637
|
-
> `name`, `url`, `token`, and `
|
|
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
|
|
638
676
|
> factory; an unset instance resolves to the first configured one (else `GITLAB_URL` /
|
|
639
677
|
> `GITLAB_TOKEN`).
|
|
640
678
|
|
|
@@ -666,257 +704,26 @@ The full list is in the [Available MCP Tools](#available-mcp-tools) table above
|
|
|
666
704
|
| `EUNOMIA_POLICY_FILE` | Embedded policy file | `mcp_policies.json` |
|
|
667
705
|
| `EUNOMIA_REMOTE_URL` | Remote Eunomia server URL | — |
|
|
668
706
|
|
|
669
|
-
### Agent CLI (full `[agent]` runtime only)
|
|
670
|
-
| Variable | Description | Default |
|
|
671
|
-
|----------|-------------|---------|
|
|
672
|
-
| `MCP_URL` | URL of the MCP server the agent connects to | `http://localhost:8000/mcp` |
|
|
673
|
-
| `PROVIDER` | LLM provider (e.g. `openai`) | `openai` |
|
|
674
|
-
| `MODEL_ID` | Model id (e.g. `gpt-4o`) | `gpt-4o` |
|
|
675
|
-
| `ENABLE_WEB_UI` | Serve the AG-UI web interface | `True` |
|
|
676
|
-
|
|
677
|
-
See [`.env.example`](.env.example) for a copy-paste starting point.
|
|
678
|
-
|
|
679
707
|
## Agent
|
|
680
708
|
|
|
681
|
-
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.
|
|
682
|
-
|
|
683
|
-
### Running the Agent CLI
|
|
684
|
-
To start the interactive command-line agent:
|
|
685
|
-
|
|
686
|
-
```bash
|
|
687
709
|
# Set credentials
|
|
688
710
|
export GITLAB_URL="your_value"
|
|
689
711
|
export GITLAB_TOKEN="your_value"
|
|
690
712
|
|
|
691
|
-
#
|
|
692
|
-
gitlab-agent --provider openai --model-id gpt-4o
|
|
693
|
-
```
|
|
694
|
-
|
|
695
|
-
### Docker Compose Orchestration
|
|
696
|
-
The following `docker/agent.compose.yml` configures the Agent, Web UI, and Terminal Interface together:
|
|
697
|
-
|
|
698
|
-
```yaml
|
|
699
|
-
version: '3.8'
|
|
700
|
-
|
|
701
|
-
services:
|
|
702
|
-
gitlab-api-mcp:
|
|
703
|
-
image: knucklessg1/gitlab-api:mcp
|
|
704
|
-
container_name: gitlab-api-mcp
|
|
705
|
-
hostname: gitlab-api-mcp
|
|
706
|
-
restart: always
|
|
707
|
-
env_file:
|
|
708
|
-
- ../.env
|
|
709
|
-
environment:
|
|
710
|
-
- PYTHONUNBUFFERED=1
|
|
711
|
-
- HOST=0.0.0.0
|
|
712
|
-
- PORT=8000
|
|
713
|
-
- TRANSPORT=streamable-http
|
|
714
|
-
ports:
|
|
715
|
-
- "8000:8000"
|
|
716
|
-
healthcheck:
|
|
717
|
-
test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
|
|
718
|
-
interval: 30s
|
|
719
|
-
timeout: 10s
|
|
720
|
-
retries: 3
|
|
721
|
-
start_period: 10s
|
|
722
|
-
logging:
|
|
723
|
-
driver: json-file
|
|
724
|
-
options:
|
|
725
|
-
max-size: "10m"
|
|
726
|
-
max-file: "3"
|
|
727
|
-
|
|
728
|
-
gitlab-api-agent:
|
|
729
|
-
image: knucklessg1/gitlab-api:latest
|
|
730
|
-
container_name: gitlab-api-agent
|
|
731
|
-
hostname: gitlab-api-agent
|
|
732
|
-
restart: always
|
|
733
|
-
depends_on:
|
|
734
|
-
- gitlab-api-mcp
|
|
735
|
-
env_file:
|
|
736
|
-
- ../.env
|
|
737
|
-
command: [ "gitlab-agent" ]
|
|
738
|
-
environment:
|
|
739
|
-
- PYTHONUNBUFFERED=1
|
|
740
|
-
- HOST=0.0.0.0
|
|
741
|
-
- PORT=9017
|
|
742
|
-
- MCP_URL=http://gitlab-api-mcp:8000/mcp
|
|
743
|
-
- PROVIDER=${PROVIDER:-openai}
|
|
744
|
-
- MODEL_ID=${MODEL_ID:-gpt-4o}
|
|
745
|
-
- ENABLE_WEB_UI=True
|
|
746
|
-
- ENABLE_OTEL=True
|
|
747
|
-
ports:
|
|
748
|
-
- "9017:9017"
|
|
749
|
-
healthcheck:
|
|
750
|
-
test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:9017/health')"]
|
|
751
|
-
interval: 30s
|
|
752
|
-
timeout: 10s
|
|
753
|
-
retries: 3
|
|
754
|
-
start_period: 10s
|
|
755
|
-
logging:
|
|
756
|
-
driver: json-file
|
|
757
|
-
options:
|
|
758
|
-
max-size: "10m"
|
|
759
|
-
max-file: "3"
|
|
760
|
-
|
|
761
|
-
```
|
|
762
|
-
|
|
763
|
-
Detailed graph node architecture explanations, custom skill configurations, and agentic trace guides are available in [docs/agent.md](docs/agent.md).
|
|
764
|
-
|
|
765
|
-
---
|
|
766
|
-
|
|
767
|
-
## Multi-Tenancy (multiple GitLab instances)
|
|
768
|
-
|
|
769
|
-
The client is natively multi-tenant. The set of instances is declared once in the
|
|
770
|
-
shared **agent-utilities XDG config** (`~/.config/agent-utilities/config.json`) under
|
|
771
|
-
`gitlab_instances` — the **same** list the Knowledge-Graph GitLab indexer reads, so one
|
|
772
|
-
config drives both code/metadata indexing and every API/MCP call:
|
|
773
|
-
|
|
774
|
-
```json
|
|
775
|
-
{
|
|
776
|
-
"gitlab_instances": [
|
|
777
|
-
{"name": "internal", "url": "https://gitlab.arpa", "token": "glpat-xxxx", "verify_ssl": false},
|
|
778
|
-
{"name": "public", "url": "https://gitlab.com", "token": "glpat-yyyy", "verify_ssl": true}
|
|
779
|
-
]
|
|
780
|
-
}
|
|
781
|
-
```
|
|
782
|
-
|
|
783
|
-
Target a tenant by **name** from the client factory; a bare URL still works, and an
|
|
784
|
-
unset instance resolves to the first configured one (else `GITLAB_URL`/`GITLAB_TOKEN`):
|
|
785
|
-
|
|
786
|
-
```python
|
|
787
|
-
from gitlab_api.auth import get_client
|
|
788
|
-
from gitlab_api.instances import list_configured_instances
|
|
789
|
-
|
|
790
|
-
internal = get_client(instance="internal") # resolves url+token+verify from config
|
|
791
|
-
public = get_client(instance="public")
|
|
792
|
-
default = get_client() # first configured / GITLAB_URL fallback
|
|
793
|
-
names = [i.name for i in list_configured_instances()]
|
|
794
|
-
```
|
|
795
|
-
|
|
796
|
-
The MCP server exposes a `gitlab_instances` tool (`action=list|get`) to discover the
|
|
797
|
-
configured tenants (tokens are never returned). When no instances are configured, the
|
|
798
|
-
connector falls back to the single-host `GITLAB_URL`/`GITLAB_TOKEN` it has always used.
|
|
799
|
-
|
|
800
|
-
## Security & Governance
|
|
801
|
-
|
|
802
|
-
Built directly upon the enterprise-ready [`agent-utilities`](https://github.com/Knuckles-Team/agent-utilities) core, standard security parameters are fully supported:
|
|
803
|
-
|
|
804
|
-
### Access Control & Policy Enforcement
|
|
805
|
-
- **Eunomia Policies:** Fine-grained, policy-driven tool authorization. Supports `none`, local `embedded` (`mcp_policies.json`), or centralized `remote` modes.
|
|
806
|
-
- **OIDC Token Delegation:** Compliant with RFC 8693 token exchange for flowing authenticating user credentials from Web UI / ACP → Agent → MCP.
|
|
807
|
-
- **Scoped Credentials:** Execution context runs restricted to the specific caller identity.
|
|
808
|
-
|
|
809
|
-
### Runtime Security Grid
|
|
810
|
-
| Feature | Functionality | Enablement |
|
|
811
|
-
|---------|---------------|------------|
|
|
812
|
-
| **Tool Guard** | Sensitivity inspection with human-in-the-loop validation | Enabled by default |
|
|
813
|
-
| **Prompt Injection Defense** | Input scanning, repetition monitoring, and recursive loop blocks | Enabled by default |
|
|
814
|
-
| **Context Safety Guard** | Stuck-loop detectors and contextual overflow preemptive alerts | Enabled by default |
|
|
815
|
-
|
|
816
|
-
---
|
|
817
|
-
|
|
818
|
-
## Installation
|
|
819
|
-
|
|
820
|
-
Pick the extra that matches what you want to run:
|
|
821
|
-
|
|
822
|
-
| Extra | Installs | Use when |
|
|
823
|
-
|-------|----------|----------|
|
|
824
|
-
| `gitlab-api[mcp]` | Slim MCP server only (`agent-utilities[mcp]` — FastMCP/FastAPI) | You only run the **MCP server** (smallest install / image) |
|
|
825
|
-
| `gitlab-api[agent]` | Full agent runtime (`agent-utilities[agent,logfire]` — Pydantic AI + the epistemic-graph engine) | You run the **integrated agent** |
|
|
826
|
-
| `gitlab-api[all]` | Everything (`mcp` + `agent` + `gql` + `logfire`) | Development / both surfaces |
|
|
827
|
-
|
|
828
|
-
```bash
|
|
829
|
-
# MCP server only (recommended for tool hosting — slim deps)
|
|
713
|
+
# Connector-focused MCP server (includes the shared graph engine)
|
|
830
714
|
uv pip install "gitlab-api[mcp]"
|
|
831
715
|
|
|
832
|
-
# Full agent runtime (Pydantic AI + epistemic-graph engine)
|
|
833
|
-
uv pip install "gitlab-api[agent]"
|
|
834
|
-
|
|
835
716
|
# Everything (development)
|
|
836
717
|
uv pip install "gitlab-api[all]" # or: python -m pip install "gitlab-api[all]"
|
|
837
718
|
```
|
|
838
719
|
|
|
839
|
-
### Container images (`:mcp`
|
|
720
|
+
### Container images (`:mcp`)
|
|
840
721
|
|
|
841
|
-
One multi-stage `docker/Dockerfile` builds
|
|
722
|
+
One multi-stage `docker/Dockerfile` builds the MCP-only image (`--target mcp`):
|
|
842
723
|
|
|
843
724
|
| Image tag | Build target | Contents | Entrypoint |
|
|
844
725
|
|-----------|--------------|----------|------------|
|
|
845
|
-
| `
|
|
846
|
-
| `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` |
|
|
847
727
|
|
|
848
728
|
```bash
|
|
849
|
-
docker build --target mcp -t
|
|
850
|
-
docker build --target agent -t knucklessg1/gitlab-api:latest docker/ # full agent
|
|
851
|
-
```
|
|
852
|
-
|
|
853
|
-
`docker/mcp.compose.yml` runs the slim `:mcp` server; `docker/agent.compose.yml` runs the
|
|
854
|
-
agent (`:latest`) with a co-located `:mcp` sidecar.
|
|
855
|
-
|
|
856
|
-
### Knowledge-graph database (`epistemic-graph`)
|
|
857
|
-
|
|
858
|
-
The **full agent** (`[agent]` / `:latest`) embeds the **epistemic-graph** engine (pulled in
|
|
859
|
-
transitively via `agent-utilities[agent]`). For production — or to share one knowledge graph
|
|
860
|
-
across multiple agents — run **epistemic-graph as its own database container** and point the
|
|
861
|
-
agent at it instead of embedding it. Deployment recipes (single-node + Raft HA), connection
|
|
862
|
-
config, and the full database architecture (with diagrams) are documented in the
|
|
863
|
-
[epistemic-graph deployment guide](https://knuckles-team.github.io/epistemic-graph/deployment/).
|
|
864
|
-
The slim `[mcp]` server does **not** require the database.
|
|
865
|
-
|
|
866
|
-
---
|
|
867
|
-
|
|
868
|
-
## Documentation
|
|
869
|
-
|
|
870
|
-
The complete documentation is published as the
|
|
871
|
-
[official documentation site](https://knuckles-team.github.io/gitlab-api/) and is the
|
|
872
|
-
recommended reference for installation, deployment, and day-to-day operation.
|
|
873
|
-
|
|
874
|
-
| Page | Contents |
|
|
875
|
-
|---|---|
|
|
876
|
-
| [Installation](https://knuckles-team.github.io/gitlab-api/installation/) | pip, source, extras, prebuilt Docker image |
|
|
877
|
-
| [Deployment](https://knuckles-team.github.io/gitlab-api/deployment/) | run the MCP and agent servers, Compose, Caddy + Technitium, env config |
|
|
878
|
-
| [Usage](https://knuckles-team.github.io/gitlab-api/usage/) | the MCP tools, the `Api` client, the CLI |
|
|
879
|
-
| [Backing Platform](https://knuckles-team.github.io/gitlab-api/platform/) | deploy GitLab with Docker |
|
|
880
|
-
| [Overview](https://knuckles-team.github.io/gitlab-api/overview/) | the action-routed tool surface and architecture |
|
|
881
|
-
| [Concepts](https://knuckles-team.github.io/gitlab-api/concepts/) | concept registry (`CONCEPT:GL-*`) |
|
|
882
|
-
|
|
883
|
-
---
|
|
884
|
-
|
|
885
|
-
## Repository Owners
|
|
886
|
-
|
|
887
|
-
<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" />
|
|
888
|
-
|
|
889
|
-

|
|
890
|
-

|
|
891
|
-
|
|
892
|
-
---
|
|
893
|
-
|
|
894
|
-
## Contribute
|
|
895
|
-
|
|
896
|
-
Contributions are welcome! Please ensure code quality by executing local checks before submitting pull requests:
|
|
897
|
-
- Format code using `ruff format .`
|
|
898
|
-
- Lint code using `ruff check .`
|
|
899
|
-
- Validate type-safety with `mypy .`
|
|
900
|
-
- Execute test suites using `pytest`
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
<!-- BEGIN agent-os-genesis-deploy (generated; do not edit between markers) -->
|
|
904
|
-
|
|
905
|
-
## Deploy with `agent-os-genesis`
|
|
906
|
-
|
|
907
|
-
This package can be provisioned for you — skill-guided — by the **`agent-os-genesis`**
|
|
908
|
-
universal skill (its *single-package deploy mode*): it picks your install method, seeds
|
|
909
|
-
secrets to OpenBao/Vault (or `.env`), trusts your enterprise CA, registers the MCP
|
|
910
|
-
server, and verifies it — the same machinery that stands up the whole Agent OS, narrowed
|
|
911
|
-
to just this package. Ask your agent to **"deploy `gitlab-api` with agent-os-genesis"**.
|
|
912
|
-
|
|
913
|
-
| Install mode | Command |
|
|
914
|
-
|------|---------|
|
|
915
|
-
| Bare-metal, prod (PyPI) | `uvx gitlab-mcp` · or `uv tool install gitlab-api` |
|
|
916
|
-
| Bare-metal, dev (editable) | `uv pip install -e ".[all]"` · or `pip install -e ".[all]"` |
|
|
917
|
-
| Container, prod | deploy `knucklessg1/gitlab-api:latest` via docker-compose / swarm / podman / podman-compose / kubernetes |
|
|
918
|
-
| Container, dev (editable) | deploy `docker/compose.dev.yml` (source-mounted at `/src`; edits live on restart) |
|
|
919
|
-
|
|
920
|
-
Secrets are read-existing + seeded via `vault_sync` — you are only prompted for what's missing.
|
|
921
|
-
|
|
922
|
-
<!-- END agent-os-genesis-deploy -->
|
|
729
|
+
docker build --target mcp -t example/gitlab-api:mcp docker/ # connector-focused MCP server
|