1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
# GitLab MCP Server Configuration
#
# This is an example configuration file. Copy to config.toml and customize.
# Environment variables can override any setting using the prefix TANUKI_MCP_
# e.g., TANUKI_MCP_GITLAB__TOKEN for gitlab.token
# =============================================================================
# Server Configuration
# =============================================================================
[]
# Server name (shown in MCP client)
= "tanuki-mcp"
# Server version
= "0.1.0"
# Transport mode: "stdio" or "http"
= "stdio"
# HTTP server settings (only used when transport = "http")
= "127.0.0.1"
= 20289
# =============================================================================
# GitLab Connection
# =============================================================================
[]
# GitLab instance URL (required)
= "https://gitlab.com"
# Personal Access Token (required - recommended to set via TANUKI_MCP_GITLAB__TOKEN env var)
# token = "glpat-xxxxxxxxxxxxxxxxxxxx"
# Request timeout in seconds
= 30
# Maximum retries for failed requests
= 3
# Verify SSL certificates
= true
# Custom User-Agent header (optional, default: "tanuki-mcp/<version>")
# user_agent = "my-custom-agent/1.0"
# =============================================================================
# Access Control
# =============================================================================
#
# The access control system uses a hierarchical resolution:
# 1. Project-specific action override
# 2. Global action override
# 3. Project-specific category
# 4. Global category
# 5. Project-specific base (all)
# 6. Global base (all)
#
# Access levels:
# - "none": No decision at this level (falls through to next level in hierarchy)
# - "deny": Explicitly deny all operations
# - "read": Read-only operations (list_*, get_*)
# - "full": All operations including write and delete
#
# Pattern matching:
# - deny: Array of regex patterns for tools to deny
# - allow: Array of regex patterns that override deny
[]
# Base access level for all tools
= "read"
# Global deny patterns (regex) - these block tools regardless of other settings
# deny = ["delete_.*", ".*_force"]
# Global allow patterns (regex) - override deny patterns at this level
# allow = []
# =============================================================================
# Category Access Control
# =============================================================================
#
# Available categories:
# - issues: Issue management (8 tools)
# - issue_notes: Issue comments (5 tools)
# - issue_links: Issue relationships (3 tools)
# - merge_requests: MR management (8 tools)
# - mr_discussions: MR comments/threads (7 tools)
# - mr_drafts: MR draft notes (7 tools)
# - repository: Files, tree, search (7 tools)
# - branches: Branch operations (2 tools)
# - commits: Commit operations (3 tools)
# - projects: Project management (6 tools)
# - namespaces: Namespace operations (3 tools)
# - labels: Label management (5 tools)
# - wiki: Wiki pages (5 tools)
# - pipelines: CI/CD pipelines (12 tools)
# - milestones: Milestone management (9 tools)
# - releases: Release management (6 tools)
# - users: User operations (2 tools)
# - groups: Group operations (2 tools)
# - tags: Git tag operations (9 tools)
# - search: Search operations (5 tools)
#
# Note: Prompts (analyze_issue, review_merge_request) and Resources
# (gitlab:// URIs) are always available when underlying tools have access.
[]
= "full"
[]
= "full"
[]
= "full"
[]
= "full"
= ["merge_merge_request"] # Prevent auto-merging
[]
= "full"
[]
= "full"
[]
= "read"
[]
= "read"
[]
= "read"
[]
= "read"
[]
= "read"
[]
= "full"
[]
= "full"
[]
= "read"
= ["create_pipeline", "retry_pipeline_job"]
[]
= "full"
[]
= "read"
[]
= "read"
[]
= "read"
[]
= "read"
[]
= "read"
# =============================================================================
# Individual Action Overrides
# =============================================================================
#
# Override specific tools regardless of category settings.
# Format: tool_name = "allow" | "deny"
[]
# Examples:
# create_issue_note = "allow" # Explicitly allow
# delete_project = "deny" # Explicitly deny
# =============================================================================
# Project-Specific Overrides
# =============================================================================
#
# Override settings for specific projects.
# Project paths should match GitLab paths (e.g., "group/project" or "group/subgroup/project")
# Example: Production project is read-only
# [access_control.projects."mycompany/production-app"]
# all = "read"
# deny = [".*"]
# allow = ["list_.*", "get_.*"]
# Example: Sandbox project has full access
# [access_control.projects."mycompany/sandbox"]
# all = "full"
# Example: Documentation project allows wiki edits only
# [access_control.projects."mycompany/docs"]
# all = "read"
# [access_control.projects."mycompany/docs".categories.wiki]
# level = "full"
# =============================================================================
# Dashboard Configuration
# =============================================================================
#
# The dashboard provides a web interface for monitoring MCP server usage.
# It shows:
# - Configuration summary
# - Projects being accessed
# - Tools being used with statistics
# - Category breakdown
# - Recent requests log
#
# The dashboard runs on a separate HTTP port and auto-refreshes every 2 seconds.
[]
# Enable or disable the dashboard (default: true)
= true
# Dashboard host address
# Use "127.0.0.1" for local access only
# Use "0.0.0.0" to allow external access (be careful with security!)
= "127.0.0.1"
# Dashboard port (default: 19892)
# Make sure this doesn't conflict with other services
= 19892
# Note: Port auto-discovery is enabled. If the configured port is taken,
# the server will try the next 10 consecutive ports, then let the OS assign one.
# Command-line options:
# --no-dashboard Disable the dashboard
# --dashboard-host Override dashboard host
# --dashboard-port Override dashboard port
#
# Environment variables:
# TANUKI_MCP_DASHBOARD__ENABLED=false
# TANUKI_MCP_DASHBOARD__HOST=0.0.0.0
# TANUKI_MCP_DASHBOARD__PORT=19892