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.
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/LICENSE +1 -1
- gitlab_api-26.2.0/README.md → gitlab_api-27.3.1/PKG-INFO +99 -291
- gitlab_api-26.2.0/PKG-INFO → gitlab_api-27.3.1/README.md +69 -323
- {gitlab_api-26.2.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.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_environments.py +6 -42
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_issues.py +3 -33
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_merge_requests.py +3 -17
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_other.py +3 -35
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_pipelines.py +3 -41
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_projects.py +35 -70
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_repositories.py +3 -59
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_system.py +4 -6
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_users_groups.py +11 -31
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/api_client_vulnerabilities.py +11 -9
- {gitlab_api-26.2.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.2.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.2.0 → gitlab_api-27.3.1}/gitlab_api/gitlab_gql.py +100 -44
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/gitlab_input_models.py +165 -257
- {gitlab_api-26.2.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.2.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.2.0 → gitlab_api-27.3.1}/gitlab_api/ontology/gitlab.ttl +60 -2
- 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.2.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.2.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.2.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.2.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.2.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.2.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.2.0 → gitlab_api-27.3.1}/gitlab_api.egg-info/PKG-INFO +83 -307
- {gitlab_api-26.2.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.2.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.2.0 → gitlab_api-27.3.1}/scripts/verify_api_integration.py +156 -112
- {gitlab_api-26.2.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.2.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.2.0 → gitlab_api-27.3.1}/tests/test_gitlab_gql.py +49 -31
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/tests/test_gitlab_mcp_validation.py +1 -1
- {gitlab_api-26.2.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.2.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.2.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.2.0 → gitlab_api-27.3.1}/tests/test_verify_agent.py +1 -1
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/tests/verify_a2a_queries.py +21 -11
- gitlab_api-26.2.0/gitlab_api/__main__.py +0 -4
- gitlab_api-26.2.0/gitlab_api/agent_server.py +0 -83
- gitlab_api-26.2.0/gitlab_api/api/api_client_base.py +0 -214
- gitlab_api-26.2.0/gitlab_api/auth.py +0 -180
- gitlab_api-26.2.0/gitlab_api/instances.py +0 -110
- gitlab_api-26.2.0/gitlab_api/kg_ingest.py +0 -144
- gitlab_api-26.2.0/gitlab_api/main_agent.json +0 -18
- gitlab_api-26.2.0/gitlab_api/mcp/__init__.py +0 -71
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_branches.py +0 -59
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_commits.py +0 -93
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_custom_api.py +0 -47
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_deploy_tokens.py +0 -77
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_environments.py +0 -89
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_epics.py +0 -59
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_graphql.py +0 -86
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_graphql_ops.py +0 -93
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_groups.py +0 -72
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_issues.py +0 -63
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_jobs.py +0 -76
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_labels.py +0 -59
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_members.py +0 -53
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_merge_requests.py +0 -65
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_merge_rules.py +0 -100
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_milestones.py +0 -59
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_misc.py +0 -10
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_namespaces.py +0 -53
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_notes.py +0 -59
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_packages.py +0 -55
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_pipeline_schedules.py +0 -88
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_pipelines.py +0 -53
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_projects.py +0 -90
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_protected_branches.py +0 -63
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_releases.py +0 -87
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_runners.py +0 -100
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_snippets.py +0 -59
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_tags.py +0 -75
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_users.py +0 -61
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_vulnerabilities.py +0 -59
- gitlab_api-26.2.0/gitlab_api/mcp/mcp_wiki.py +0 -63
- gitlab_api-26.2.0/gitlab_api/mcp_server.py +0 -1952
- gitlab_api-26.2.0/gitlab_api/prompts/main_agent.json +0 -18
- gitlab_api-26.2.0/gitlab_api.egg-info/entry_points.txt +0 -15
- gitlab_api-26.2.0/gitlab_api.egg-info/requires.txt +0 -21
- gitlab_api-26.2.0/pyproject.toml +0 -72
- gitlab_api-26.2.0/requirements.txt +0 -1
- gitlab_api-26.2.0/scripts/security_sanitizer.py +0 -160
- gitlab_api-26.2.0/scripts/validate_a2a_agent.py +0 -139
- gitlab_api-26.2.0/scripts/validate_agent.py +0 -62
- gitlab_api-26.2.0/tests/test_action_discovery.py +0 -70
- gitlab_api-26.2.0/tests/test_auth.py +0 -105
- gitlab_api-26.2.0/tests/test_concept_parity.py +0 -87
- gitlab_api-26.2.0/tests/test_gitlab_api_brute_force_coverage.py +0 -411
- gitlab_api-26.2.0/tests/test_kg_ingest.py +0 -93
- gitlab_api-26.2.0/tests/test_startup.py +0 -12
- gitlab_api-26.2.0/tests/test_tool_modes.py +0 -42
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/MANIFEST.in +0 -0
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/api/__init__.py +0 -0
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/connectors/__init__.py +0 -0
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/mcp_config.json +0 -0
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/prompts/__init__.py +0 -0
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api/skills/__init__.py +0 -0
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/gitlab_api.egg-info/dependency_links.txt +0 -0
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/setup.cfg +0 -0
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/tests/__init__.py +0 -0
- {gitlab_api-26.2.0 → gitlab_api-27.3.1}/tests/conftest.py +0 -0
- {gitlab_api-26.2.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
|
|
|
@@ -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
|
-
|
|
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/
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
348
|
-
>
|
|
349
|
-
>
|
|
350
|
-
>
|
|
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": "
|
|
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": "
|
|
456
|
+
"HOST": "127.0.0.1",
|
|
425
457
|
"PORT": "8000",
|
|
426
|
-
"MCP_TOOL_MODE": "
|
|
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
|
-
|
|
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 -
|
|
482
|
-
--
|
|
483
|
-
-
|
|
484
|
-
-
|
|
485
|
-
-
|
|
486
|
-
|
|
487
|
-
-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 \
|
|
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
|
-
|
|
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
|
|
531
|
-
|
|
532
|
-
[Deployment guide](https://knuckles-team.github.io/gitlab-api/deployment/)
|
|
533
|
-
|
|
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
|
|
537
|
-
|
|
538
|
-
- **Remote URL** — connect
|
|
539
|
-
|
|
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` |
|
|
558
|
-
| `OTEL_EXPORTER_OTLP_SECRET_KEY` |
|
|
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` |
|
|
565
|
-
| `
|
|
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-
|
|
637
|
+
#### Inherited agent-connector-sdk variables (apply to every connector)
|
|
599
638
|
|
|
600
639
|
| Variable | Example | Description |
|
|
601
640
|
|----------|---------|-------------|
|
|
602
|
-
| `MCP_TOOL_MODE` | `
|
|
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
|
|
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
|
-
| `
|
|
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 +
|
|
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
|
-
| `
|
|
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-
|
|
636
|
-
> `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
|
|
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
|
-
#
|
|
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`
|
|
720
|
+
### Container images (`:mcp`)
|
|
839
721
|
|
|
840
|
-
One multi-stage `docker/Dockerfile` builds
|
|
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
|
-
| `
|
|
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
|
|
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
|
-

|
|
889
|
-

|
|
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
|