thumbgate 1.27.11 → 1.27.13
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.
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/llms.txt +2 -1
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +2 -4
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/mcp/server-stdio.js +1 -1
- package/adapters/opencode/opencode.json +1 -1
- package/adapters/policy-engine/ethicore-guardian-client.js +68 -0
- package/adapters/policy-engine/thumbgate-policy-engine-adapter.js +260 -0
- package/bin/cli.js +78 -259
- package/config/builtin-lessons.json +23 -0
- package/config/gate-templates.json +0 -228
- package/config/gates/claim-verification.json +0 -18
- package/package.json +35 -25
- package/public/assets/brand/thumbgate-logo-transparent.svg +22 -0
- package/public/assets/brand/thumbgate-mark-inline-v3.svg +19 -0
- package/public/assets/brand/thumbgate-mark.svg +11 -5
- package/public/blog.html +0 -30
- package/public/brand/thumbgate-mark.svg +9 -5
- package/public/chatgpt-app.html +2 -2
- package/public/compare.html +2 -1
- package/public/dashboard.html +1 -1
- package/public/federal.html +1 -1
- package/public/index.html +95 -216
- package/public/learn.html +59 -35
- package/public/lessons.html +1 -1
- package/public/numbers.html +2 -2
- package/public/pro.html +7 -7
- package/scripts/aws-blocks-guardrails.js +228 -0
- package/scripts/cli-schema.js +22 -10
- package/scripts/dashboard-chat.js +2 -1
- package/scripts/document-intake.js +1 -49
- package/scripts/durability/step.js +3 -3
- package/scripts/gate-stats.js +5 -11
- package/scripts/gemini-embedding-policy.js +2 -1
- package/scripts/hook-stop-anti-claim.js +116 -184
- package/scripts/hosted-config.js +0 -12
- package/scripts/llm-client.js +187 -5
- package/scripts/plausible-domain-config.js +3 -1
- package/scripts/seo-gsd.js +240 -1
- package/scripts/tool-registry.js +2 -2
- package/scripts/vector-store.js +44 -0
- package/scripts/workspace-evolver.js +62 -2
- package/src/api/server.js +340 -131
- package/public/assets/brand/thumbgate-mark-inline.svg +0 -15
- package/public/compare/adopt-ai.html +0 -219
- package/public/compare/agentix-labs.html +0 -197
- package/public/compare/ai-experience-orchestration.html +0 -216
- package/public/compare/anthropic-claude-for-legal.html +0 -260
- package/public/compare/anthropic-containment.html +0 -280
- package/public/compare/arcade.html +0 -175
- package/public/compare/arcjet.html +0 -239
- package/public/compare/bumblebee.html +0 -307
- package/public/compare/claude-code-hooks.html +0 -294
- package/public/compare/databricks-unity-ai-gateway.html +0 -215
- package/public/compare/fallow.html +0 -351
- package/public/compare/heidi.html +0 -233
- package/public/compare/mem0.html +0 -342
- package/public/compare/oak-and-sparrow-gatekeeper.html +0 -289
- package/public/compare/rein.html +0 -236
- package/public/compare/sigmashake.html +0 -256
- package/public/compare/speclock.html +0 -342
- package/public/guides/agent-harness-optimization.html +0 -342
- package/public/guides/agentic-web-governance.html +0 -406
- package/public/guides/ai-agent-governance-sprint.html +0 -415
- package/public/guides/ai-agent-pre-action-approval-gates.html +0 -401
- package/public/guides/ai-agent-workflow-migration-checklist.html +0 -392
- package/public/guides/ai-deployment-readiness.html +0 -415
- package/public/guides/ai-mode-ads-agent-governance.html +0 -401
- package/public/guides/ai-search-topical-presence.html +0 -342
- package/public/guides/autoresearch-agent-safety.html +0 -342
- package/public/guides/background-agent-governance.html +0 -358
- package/public/guides/best-tools-stop-ai-agents-breaking-production.html +0 -363
- package/public/guides/browser-automation-safety.html +0 -342
- package/public/guides/chatgpt-ads-trust.html +0 -353
- package/public/guides/claude-code-feedback.html +0 -339
- package/public/guides/claude-code-prevent-repeated-mistakes.html +0 -161
- package/public/guides/claude-code-skills-guardrails.html +0 -343
- package/public/guides/claude-desktop.html +0 -356
- package/public/guides/code-knowledge-graph-guardrails.html +0 -365
- package/public/guides/codex-cli-guardrails.html +0 -339
- package/public/guides/cursor-agent-guardrails.html +0 -339
- package/public/guides/cursor-prevent-repeated-mistakes.html +0 -161
- package/public/guides/database-agent-safety.html +0 -406
- package/public/guides/deepseek-v4-runtime-guardrails.html +0 -346
- package/public/guides/developer-machine-supply-chain-guardrails.html +0 -358
- package/public/guides/gcp-mcp-guardrails.html +0 -147
- package/public/guides/gemini-cli-feedback-memory.html +0 -339
- package/public/guides/gpt-5-5-model-evaluation.html +0 -358
- package/public/guides/internal-ai-engineering-stack-guardrails.html +0 -348
- package/public/guides/long-running-agent-context-management.html +0 -346
- package/public/guides/mcp-tool-governance.html +0 -401
- package/public/guides/multica-thumbgate-setup.html +0 -134
- package/public/guides/native-messaging-host-security.html +0 -342
- package/public/guides/policy-engine-pre-action-gates.html +0 -346
- package/public/guides/pre-action-checks.html +0 -342
- package/public/guides/pretooluse-hooks-vs-advisory-prompt-rules.html +0 -342
- package/public/guides/prompt-tricks-to-workflow-rules.html +0 -365
- package/public/guides/proxy-pointer-rag-guardrails.html +0 -352
- package/public/guides/rag-precision-tuning-guardrails.html +0 -352
- package/public/guides/reasoning-compression-guardrails.html +0 -346
- package/public/guides/relational-knowledge-ai-recommendations.html +0 -342
- package/public/guides/roo-code-alternative-cline.html +0 -339
- package/public/guides/semantic-programmatic-seo-guardrails.html +0 -352
- package/public/guides/seo-agent-skills-guardrails.html +0 -344
- package/public/guides/stop-repeated-ai-agent-mistakes.html +0 -342
- package/public/learn/ac-dc-runtime-enforcement.html +0 -277
- package/public/learn/agent-harness-pattern.html +0 -181
- package/public/learn/agent-identity-connector-governance.html +0 -146
- package/public/learn/agent-swarms-shared-gates.html +0 -173
- package/public/learn/agentic-enterprise-context-brain.html +0 -117
- package/public/learn/agentic-os-team-governance.html +0 -146
- package/public/learn/ai-agent-governance.html +0 -158
- package/public/learn/ai-agent-persistent-memory.html +0 -211
- package/public/learn/anthropomorphic-claim-gates.html +0 -180
- package/public/learn/background-agent-control-layer.html +0 -184
- package/public/learn/claude-code-goal-with-rubrics.html +0 -205
- package/public/learn/codex-role-plugins-need-governance.html +0 -125
- package/public/learn/cost-aware-agent-gate-routing.html +0 -173
- package/public/learn/databricks-unity-ai-gateway-runtime-governance.html +0 -157
- package/public/learn/deterministic-agent-workflows.html +0 -185
- package/public/learn/feedback-loop-vs-decision-layer.html +0 -283
- package/public/learn/from-prototype-to-production.html +0 -223
- package/public/learn/learn.css +0 -51
- package/public/learn/mcp-pre-action-checks-explained.html +0 -172
- package/public/learn/pretix-stripe-connect-marketplaces.html +0 -161
- package/public/learn/regulated-agent-execution-boundary.html +0 -196
- package/public/learn/spec-driven-development.html +0 -168
- package/public/learn/stop-ai-agent-force-push.html +0 -134
- package/public/learn/vibe-coding-safety-net.html +0 -142
- package/scripts/reddit-browser-notification-watch.js +0 -230
|
@@ -1,401 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title>MCP Tool Governance | Pre-Action Gates Before Agents Call Tools</title>
|
|
7
|
-
<meta name="description" content="MCP makes tools easy for agents to discover and call. ThumbGate adds the missing governance layer: approval boundaries, evidence requirements, and audit logs..." />
|
|
8
|
-
<meta property="og:title" content="MCP Tool Governance | Pre-Action Gates Before Agents Call Tools" />
|
|
9
|
-
<meta property="og:description" content="MCP makes tools easy for agents to discover and call. ThumbGate adds the missing governance layer: approval boundaries, evidence requirements, and audit logs..." />
|
|
10
|
-
<meta property="og:type" content="article" />
|
|
11
|
-
<meta property="og:url" content="https://thumbgate.ai/guides/mcp-tool-governance" />
|
|
12
|
-
<link rel="canonical" href="https://thumbgate.ai/guides/mcp-tool-governance" />
|
|
13
|
-
<link rel="llm-context" href="/llm-context.md" type="text/markdown" />
|
|
14
|
-
<link rel="icon" type="image/svg+xml" href="/thumbgate-icon.png" />
|
|
15
|
-
<link rel="apple-touch-icon" href="/assets/brand/thumbgate-mark.svg" />
|
|
16
|
-
<meta property="og:image" content="/og.png" />
|
|
17
|
-
<style>
|
|
18
|
-
:root {
|
|
19
|
-
--bg: #0a0a0b;
|
|
20
|
-
--bg-raised: #111113;
|
|
21
|
-
--bg-card: #161618;
|
|
22
|
-
--line: #222225;
|
|
23
|
-
--text: #e8e8ec;
|
|
24
|
-
--muted: #8b8b96;
|
|
25
|
-
--cyan: #22d3ee;
|
|
26
|
-
--green: #4ade80;
|
|
27
|
-
--red: #f87171;
|
|
28
|
-
}
|
|
29
|
-
* { box-sizing: border-box; }
|
|
30
|
-
body {
|
|
31
|
-
margin: 0;
|
|
32
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
33
|
-
background: var(--bg);
|
|
34
|
-
color: var(--text);
|
|
35
|
-
line-height: 1.65;
|
|
36
|
-
}
|
|
37
|
-
a { color: var(--cyan); text-decoration: none; }
|
|
38
|
-
a:hover { text-decoration: underline; }
|
|
39
|
-
.container { max-width: 980px; margin: 0 auto; padding: 0 24px; }
|
|
40
|
-
.topbar {
|
|
41
|
-
position: sticky;
|
|
42
|
-
top: 0;
|
|
43
|
-
z-index: 20;
|
|
44
|
-
backdrop-filter: blur(12px);
|
|
45
|
-
background: rgba(10, 10, 11, 0.88);
|
|
46
|
-
border-bottom: 1px solid var(--line);
|
|
47
|
-
}
|
|
48
|
-
.topbar .container {
|
|
49
|
-
display: flex;
|
|
50
|
-
justify-content: space-between;
|
|
51
|
-
align-items: center;
|
|
52
|
-
padding-top: 14px;
|
|
53
|
-
padding-bottom: 14px;
|
|
54
|
-
}
|
|
55
|
-
.brand {
|
|
56
|
-
font-weight: 700;
|
|
57
|
-
color: var(--text);
|
|
58
|
-
display: inline-flex;
|
|
59
|
-
align-items: center;
|
|
60
|
-
gap: 8px;
|
|
61
|
-
text-decoration: none;
|
|
62
|
-
}
|
|
63
|
-
.brand .logo-mark { width: 28px; height: 28px; display: block; }
|
|
64
|
-
.hero { padding: 72px 0 32px; }
|
|
65
|
-
.eyebrow {
|
|
66
|
-
display: inline-flex;
|
|
67
|
-
align-items: center;
|
|
68
|
-
gap: 8px;
|
|
69
|
-
padding: 6px 12px;
|
|
70
|
-
border-radius: 999px;
|
|
71
|
-
border: 1px solid rgba(34, 211, 238, 0.22);
|
|
72
|
-
background: rgba(34, 211, 238, 0.1);
|
|
73
|
-
color: var(--cyan);
|
|
74
|
-
text-transform: uppercase;
|
|
75
|
-
letter-spacing: 0.08em;
|
|
76
|
-
font-size: 12px;
|
|
77
|
-
font-weight: 700;
|
|
78
|
-
}
|
|
79
|
-
h1 {
|
|
80
|
-
font-size: clamp(34px, 5vw, 56px);
|
|
81
|
-
line-height: 1.06;
|
|
82
|
-
letter-spacing: -0.04em;
|
|
83
|
-
margin: 16px 0;
|
|
84
|
-
max-width: 760px;
|
|
85
|
-
}
|
|
86
|
-
.hero p {
|
|
87
|
-
max-width: 720px;
|
|
88
|
-
color: var(--muted);
|
|
89
|
-
font-size: 18px;
|
|
90
|
-
}
|
|
91
|
-
.signal-row {
|
|
92
|
-
display: flex;
|
|
93
|
-
flex-wrap: wrap;
|
|
94
|
-
gap: 12px;
|
|
95
|
-
margin: 28px 0 0;
|
|
96
|
-
}
|
|
97
|
-
.signal-pill {
|
|
98
|
-
display: inline-flex;
|
|
99
|
-
align-items: center;
|
|
100
|
-
gap: 8px;
|
|
101
|
-
padding: 10px 14px;
|
|
102
|
-
border-radius: 999px;
|
|
103
|
-
border: 1px solid var(--line);
|
|
104
|
-
background: var(--bg-raised);
|
|
105
|
-
font-weight: 600;
|
|
106
|
-
font-size: 14px;
|
|
107
|
-
}
|
|
108
|
-
.signal-pill.up {
|
|
109
|
-
border-color: rgba(74, 222, 128, 0.28);
|
|
110
|
-
color: #b8f7c8;
|
|
111
|
-
background: rgba(74, 222, 128, 0.1);
|
|
112
|
-
}
|
|
113
|
-
.signal-pill.down {
|
|
114
|
-
border-color: rgba(248, 113, 113, 0.28);
|
|
115
|
-
color: #ffc0c0;
|
|
116
|
-
background: rgba(248, 113, 113, 0.1);
|
|
117
|
-
}
|
|
118
|
-
.grid {
|
|
119
|
-
display: grid;
|
|
120
|
-
grid-template-columns: minmax(0, 2fr) minmax(280px, 1fr);
|
|
121
|
-
gap: 24px;
|
|
122
|
-
padding-bottom: 72px;
|
|
123
|
-
}
|
|
124
|
-
.card, .detail-section, .sidebar-card {
|
|
125
|
-
background: var(--bg-card);
|
|
126
|
-
border: 1px solid var(--line);
|
|
127
|
-
border-radius: 16px;
|
|
128
|
-
}
|
|
129
|
-
.card { padding: 24px; }
|
|
130
|
-
.detail-section { padding: 24px; margin-bottom: 18px; }
|
|
131
|
-
.detail-section h2 { margin: 0 0 12px; font-size: 24px; letter-spacing: -0.03em; }
|
|
132
|
-
.detail-section p { color: var(--muted); }
|
|
133
|
-
.detail-section ul, .card ul { padding-left: 18px; color: var(--muted); }
|
|
134
|
-
.card h2 { margin-top: 0; }
|
|
135
|
-
.sidebar {
|
|
136
|
-
display: flex;
|
|
137
|
-
flex-direction: column;
|
|
138
|
-
gap: 18px;
|
|
139
|
-
}
|
|
140
|
-
.sidebar-card {
|
|
141
|
-
padding: 20px;
|
|
142
|
-
}
|
|
143
|
-
/* Only the first sidebar card sticks. Stacking multiple stickies at the
|
|
144
|
-
same top offset makes them overlap each other on scroll. The related-
|
|
145
|
-
pages card flows normally below. */
|
|
146
|
-
.sidebar-card:first-child {
|
|
147
|
-
position: sticky;
|
|
148
|
-
top: 84px;
|
|
149
|
-
max-height: calc(100vh - 104px);
|
|
150
|
-
overflow-y: auto;
|
|
151
|
-
-webkit-overflow-scrolling: touch;
|
|
152
|
-
}
|
|
153
|
-
.proof-links {
|
|
154
|
-
display: flex;
|
|
155
|
-
flex-wrap: wrap;
|
|
156
|
-
gap: 12px;
|
|
157
|
-
margin-top: 16px;
|
|
158
|
-
}
|
|
159
|
-
.cta-button {
|
|
160
|
-
display: inline-flex;
|
|
161
|
-
align-items: center;
|
|
162
|
-
justify-content: center;
|
|
163
|
-
margin-top: 18px;
|
|
164
|
-
padding: 12px 16px;
|
|
165
|
-
border-radius: 10px;
|
|
166
|
-
background: var(--cyan);
|
|
167
|
-
color: #071116;
|
|
168
|
-
font-weight: 700;
|
|
169
|
-
text-decoration: none;
|
|
170
|
-
}
|
|
171
|
-
.paid-sprint-card {
|
|
172
|
-
border-color: rgba(74, 222, 128, 0.32);
|
|
173
|
-
background: linear-gradient(180deg, rgba(17, 17, 19, 0.98), rgba(10, 20, 14, 0.96));
|
|
174
|
-
}
|
|
175
|
-
.paid-sprint-card p {
|
|
176
|
-
color: var(--muted);
|
|
177
|
-
font-size: 14px;
|
|
178
|
-
line-height: 1.55;
|
|
179
|
-
}
|
|
180
|
-
.paid-offers {
|
|
181
|
-
display: grid;
|
|
182
|
-
gap: 10px;
|
|
183
|
-
margin-top: 16px;
|
|
184
|
-
}
|
|
185
|
-
.paid-offer {
|
|
186
|
-
display: flex;
|
|
187
|
-
align-items: center;
|
|
188
|
-
justify-content: space-between;
|
|
189
|
-
gap: 12px;
|
|
190
|
-
padding: 12px;
|
|
191
|
-
border: 1px solid rgba(74, 222, 128, 0.28);
|
|
192
|
-
border-radius: 10px;
|
|
193
|
-
color: var(--fg);
|
|
194
|
-
text-decoration: none;
|
|
195
|
-
background: rgba(0, 0, 0, 0.22);
|
|
196
|
-
}
|
|
197
|
-
.paid-offer strong {
|
|
198
|
-
color: #9af5b0;
|
|
199
|
-
white-space: nowrap;
|
|
200
|
-
}
|
|
201
|
-
.paid-offer:hover, .paid-offer:focus-visible {
|
|
202
|
-
border-color: rgba(74, 222, 128, 0.62);
|
|
203
|
-
outline: none;
|
|
204
|
-
}
|
|
205
|
-
.secondary-cta {
|
|
206
|
-
display: inline-flex;
|
|
207
|
-
margin-top: 12px;
|
|
208
|
-
color: var(--cyan);
|
|
209
|
-
font-size: 14px;
|
|
210
|
-
font-weight: 700;
|
|
211
|
-
text-decoration: none;
|
|
212
|
-
}
|
|
213
|
-
.faq-item {
|
|
214
|
-
border-top: 1px solid var(--line);
|
|
215
|
-
padding: 14px 0;
|
|
216
|
-
}
|
|
217
|
-
.faq-item summary {
|
|
218
|
-
cursor: pointer;
|
|
219
|
-
font-weight: 600;
|
|
220
|
-
}
|
|
221
|
-
.faq-item p {
|
|
222
|
-
color: var(--muted);
|
|
223
|
-
}
|
|
224
|
-
.related-card {
|
|
225
|
-
display: block;
|
|
226
|
-
padding: 14px;
|
|
227
|
-
border-radius: 12px;
|
|
228
|
-
border: 1px solid var(--line);
|
|
229
|
-
background: var(--bg-raised);
|
|
230
|
-
margin-top: 12px;
|
|
231
|
-
color: var(--text);
|
|
232
|
-
}
|
|
233
|
-
.related-label {
|
|
234
|
-
display: block;
|
|
235
|
-
color: var(--muted);
|
|
236
|
-
font-size: 12px;
|
|
237
|
-
text-transform: uppercase;
|
|
238
|
-
letter-spacing: 0.08em;
|
|
239
|
-
margin-bottom: 4px;
|
|
240
|
-
}
|
|
241
|
-
@media (max-width: 860px) {
|
|
242
|
-
.grid {
|
|
243
|
-
grid-template-columns: 1fr;
|
|
244
|
-
}
|
|
245
|
-
.sidebar-card:first-child {
|
|
246
|
-
position: static;
|
|
247
|
-
max-height: none;
|
|
248
|
-
overflow: visible;
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
</style>
|
|
252
|
-
<script type="application/ld+json">
|
|
253
|
-
{
|
|
254
|
-
"@context": "https://schema.org",
|
|
255
|
-
"@type": "TechArticle",
|
|
256
|
-
"headline": "MCP tool governance before agents call real systems",
|
|
257
|
-
"description": "MCP makes tools easy for agents to discover and call. ThumbGate adds the missing governance layer: approval boundaries, evidence requirements, and audit logs...",
|
|
258
|
-
"about": [
|
|
259
|
-
"claude code masterclass guardrails",
|
|
260
|
-
"cursor prevent repeated mistakes",
|
|
261
|
-
"claude code prevent repeated mistakes",
|
|
262
|
-
"codex cli guardrails"
|
|
263
|
-
],
|
|
264
|
-
"url": "https://thumbgate.ai/guides/mcp-tool-governance",
|
|
265
|
-
"publisher": {
|
|
266
|
-
"@type": "Organization",
|
|
267
|
-
"name": "ThumbGate",
|
|
268
|
-
"url": "https://thumbgate.ai"
|
|
269
|
-
},
|
|
270
|
-
"mainEntityOfPage": "https://thumbgate.ai/guides/mcp-tool-governance"
|
|
271
|
-
}
|
|
272
|
-
</script>
|
|
273
|
-
<script type="application/ld+json">
|
|
274
|
-
{
|
|
275
|
-
"@context": "https://schema.org",
|
|
276
|
-
"@type": "FAQPage",
|
|
277
|
-
"mainEntity": [
|
|
278
|
-
{
|
|
279
|
-
"@type": "Question",
|
|
280
|
-
"name": "What is MCP tool governance?",
|
|
281
|
-
"acceptedAnswer": {
|
|
282
|
-
"@type": "Answer",
|
|
283
|
-
"text": "MCP tool governance is the policy, approval, evidence, and audit layer around tools exposed through Model Context Protocol so agents do not call high-risk systems without the right checks."
|
|
284
|
-
}
|
|
285
|
-
},
|
|
286
|
-
{
|
|
287
|
-
"@type": "Question",
|
|
288
|
-
"name": "How is this different from an MCP server allowlist?",
|
|
289
|
-
"acceptedAnswer": {
|
|
290
|
-
"@type": "Answer",
|
|
291
|
-
"text": "An allowlist says a tool exists or is available. ThumbGate adds runtime context: tool arguments, branch, path, environment, prior feedback, evidence requirements, and whether this exact action should be allowed now."
|
|
292
|
-
}
|
|
293
|
-
},
|
|
294
|
-
{
|
|
295
|
-
"@type": "Question",
|
|
296
|
-
"name": "Can ThumbGate work across multiple MCP-compatible agents?",
|
|
297
|
-
"acceptedAnswer": {
|
|
298
|
-
"@type": "Answer",
|
|
299
|
-
"text": "Yes. The same local-first lesson and pre-action gate pattern is designed for Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode, and MCP-compatible workflows."
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
]
|
|
303
|
-
}
|
|
304
|
-
</script>
|
|
305
|
-
</head>
|
|
306
|
-
<body>
|
|
307
|
-
<div class="topbar">
|
|
308
|
-
<div class="container">
|
|
309
|
-
<a class="brand" href="/"><img src="/assets/brand/thumbgate-mark-inline.svg" alt="ThumbGate" class="logo-mark" width="28" height="28"><span class="logo-text">ThumbGate</span></a>
|
|
310
|
-
<a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/VERIFICATION_EVIDENCE.md" target="_blank" rel="noopener">Verification evidence</a>
|
|
311
|
-
</div>
|
|
312
|
-
</div>
|
|
313
|
-
|
|
314
|
-
<main class="container">
|
|
315
|
-
<section class="hero">
|
|
316
|
-
<div class="eyebrow">guide | mcp tool governance</div>
|
|
317
|
-
<h1>MCP tool governance before agents call real systems</h1>
|
|
318
|
-
<p>MCP makes tools easy for agents to discover and call. ThumbGate adds the missing governance layer: approval boundaries, evidence requirements, and audit logs before high-risk MCP tool calls execute.</p>
|
|
319
|
-
<div class="signal-row">
|
|
320
|
-
<div class="signal-pill up">👍 Thumbs up reinforces good behavior</div>
|
|
321
|
-
<div class="signal-pill down">👎 Thumbs down blocks repeated mistakes</div>
|
|
322
|
-
</div>
|
|
323
|
-
</section>
|
|
324
|
-
|
|
325
|
-
<section class="grid">
|
|
326
|
-
<div>
|
|
327
|
-
<div class="card">
|
|
328
|
-
<h2>Why this page exists</h2>
|
|
329
|
-
<ul><li>MCP adoption expands what agents can touch, so teams need a tool-call control plane.</li><li>Governance belongs before execution, not only in post-run logs or prompt rules.</li><li>ThumbGate turns feedback, policies, and evidence requirements into enforceable pre-action gates for MCP-compatible agent workflows.</li></ul>
|
|
330
|
-
</div>
|
|
331
|
-
|
|
332
|
-
<section class="detail-section">
|
|
333
|
-
<h2>Why MCP changes the risk model</h2>
|
|
334
|
-
<p>MCP turns databases, file systems, browsers, ticketing systems, cloud APIs, and internal tools into surfaces an agent can call. That is useful, but it also means a bad plan can become a real action faster than a human reviewer can notice.</p><p>The governance question is no longer only which tools exist. It is which agent, workflow, branch, file path, command, customer record, or environment is allowed to use each tool under which proof requirements.</p>
|
|
335
|
-
|
|
336
|
-
</section>
|
|
337
|
-
<section class="detail-section">
|
|
338
|
-
<h2>What MCP tool governance needs</h2>
|
|
339
|
-
|
|
340
|
-
<ul><li>Tool inventory: know which tools are exposed to which agents and runtimes.</li><li>Risk tiers: classify destructive, customer-facing, production, payment, and data-export tools differently from read-only tools.</li><li>Pre-action checks: require evidence or approval before risky calls execute.</li><li>Feedback loops: turn thumbs-down reviews and incidents into reusable prevention rules.</li><li>Audit proof: log allowed, blocked, and approved tool calls with enough context for review.</li></ul>
|
|
341
|
-
</section>
|
|
342
|
-
<section class="detail-section">
|
|
343
|
-
<h2>Where ThumbGate fits</h2>
|
|
344
|
-
<p>ThumbGate sits between generated intent and executed action. The agent can still plan and propose MCP tool calls, but ThumbGate checks the call against learned lessons, policy boundaries, evidence requirements, and workflow risk before the tool runs.</p>
|
|
345
|
-
|
|
346
|
-
</section>
|
|
347
|
-
<div class="detail-section">
|
|
348
|
-
<h2>FAQ</h2>
|
|
349
|
-
|
|
350
|
-
<details class="faq-item">
|
|
351
|
-
<summary>What is MCP tool governance?</summary>
|
|
352
|
-
<p>MCP tool governance is the policy, approval, evidence, and audit layer around tools exposed through Model Context Protocol so agents do not call high-risk systems without the right checks.</p>
|
|
353
|
-
</details>
|
|
354
|
-
<details class="faq-item">
|
|
355
|
-
<summary>How is this different from an MCP server allowlist?</summary>
|
|
356
|
-
<p>An allowlist says a tool exists or is available. ThumbGate adds runtime context: tool arguments, branch, path, environment, prior feedback, evidence requirements, and whether this exact action should be allowed now.</p>
|
|
357
|
-
</details>
|
|
358
|
-
<details class="faq-item">
|
|
359
|
-
<summary>Can ThumbGate work across multiple MCP-compatible agents?</summary>
|
|
360
|
-
<p>Yes. The same local-first lesson and pre-action gate pattern is designed for Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode, and MCP-compatible workflows.</p>
|
|
361
|
-
</details>
|
|
362
|
-
</div>
|
|
363
|
-
</div>
|
|
364
|
-
|
|
365
|
-
<aside class="sidebar">
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
<div class="sidebar-card">
|
|
372
|
-
<h2>GSD execution brief</h2>
|
|
373
|
-
<p>This page was prioritized because it captures high-intent demand around mcp tool governance and feeds directly into ThumbGate's proof-led conversion path.</p>
|
|
374
|
-
<p><strong>Opportunity score:</strong> 83</p>
|
|
375
|
-
<p><strong>Primary persona:</strong> engineering-lead</p>
|
|
376
|
-
<p><strong>Keyword cluster:</strong> claude code masterclass guardrails, cursor prevent repeated mistakes, claude code prevent repeated mistakes, codex cli guardrails</p>
|
|
377
|
-
<p><strong>Pricing:</strong> Pro $19/mo or $149/yr. Team $49/seat/mo.</p>
|
|
378
|
-
<div class="proof-links"><a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/VERIFICATION_EVIDENCE.md" target="_blank" rel="noopener">Verification evidence</a><a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/proof/automation/report.json" target="_blank" rel="noopener">Automation proof</a><a href="https://github.com/IgorGanapolsky/ThumbGate" target="_blank" rel="noopener">GitHub repository</a></div>
|
|
379
|
-
<a class="cta-button" href="/checkout/pro?utm_source=website&utm_medium=seo_page&utm_campaign=guides_mcp-tool-governance&cta_placement=seo_brief&plan_id=pro" target="_blank" rel="noopener">Go Pro — $19/mo</a>
|
|
380
|
-
</div>
|
|
381
|
-
<div class="sidebar-card">
|
|
382
|
-
<h2>Related pages</h2>
|
|
383
|
-
|
|
384
|
-
<a class="related-card" href="/guides/pre-action-checks">
|
|
385
|
-
<span class="related-label">Related page</span>
|
|
386
|
-
<strong>What Are Pre-Action Checks?</strong>
|
|
387
|
-
</a>
|
|
388
|
-
<a class="related-card" href="/guides/ai-mode-ads-agent-governance">
|
|
389
|
-
<span class="related-label">Related page</span>
|
|
390
|
-
<strong>AI Mode ads make agent-governance promotion conversational</strong>
|
|
391
|
-
</a>
|
|
392
|
-
<a class="related-card" href="/guides/background-agent-governance">
|
|
393
|
-
<span class="related-label">Related page</span>
|
|
394
|
-
<strong>Background Agent Governance for Agent PRs</strong>
|
|
395
|
-
</a>
|
|
396
|
-
</div>
|
|
397
|
-
</aside>
|
|
398
|
-
</section>
|
|
399
|
-
</main>
|
|
400
|
-
</body>
|
|
401
|
-
</html>
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title>Multica + ThumbGate: Pre-Action Checks for Self-Hosted Agent Autopilot</title>
|
|
7
|
-
<meta name="description" content="Multica runs Claude Code / OpenCode / Code CLI as scheduled jobs on a self-hosted VPS. Autopilot magnifies tool-call mistakes. ThumbGate adds pre-action checks at the tool-call boundary with a local SQLite lesson DB on the same VPS." />
|
|
8
|
-
<meta property="og:title" content="Multica + ThumbGate: Pre-Action Checks for Self-Hosted Agent Autopilot" />
|
|
9
|
-
<meta property="og:description" content="Multica runs Claude Code / OpenCode / Code CLI as scheduled jobs on a self-hosted VPS. Autopilot magnifies tool-call mistakes. ThumbGate adds pre-action checks at the tool-call boundary with a local SQLite lesson DB on the same VPS." />
|
|
10
|
-
<meta property="og:type" content="article" />
|
|
11
|
-
<meta property="og:url" content="https://thumbgate.ai/guides/multica-thumbgate-setup" />
|
|
12
|
-
<link rel="canonical" href="https://thumbgate.ai/guides/multica-thumbgate-setup" />
|
|
13
|
-
<link rel="llm-context" href="/llm-context.md" type="text/markdown" />
|
|
14
|
-
<link rel="icon" type="image/svg+xml" href="/thumbgate-icon.png" />
|
|
15
|
-
<link rel="apple-touch-icon" href="/assets/brand/thumbgate-mark.svg" />
|
|
16
|
-
<meta property="og:image" content="/og.png" />
|
|
17
|
-
<script type="application/ld+json">
|
|
18
|
-
{
|
|
19
|
-
"@context": "https://schema.org",
|
|
20
|
-
"@type": "TechArticle",
|
|
21
|
-
"headline": "Multica + ThumbGate: Pre-Action Checks for Self-Hosted Agent Autopilot",
|
|
22
|
-
"description": "Multica runs Claude Code / OpenCode / Code CLI as scheduled jobs on a self-hosted VPS. Autopilot magnifies tool-call mistakes. ThumbGate adds pre-action checks at the tool-call boundary with a local SQLite lesson DB on the same VPS.",
|
|
23
|
-
"author": { "@type": "Person", "name": "Igor Ganapolsky", "url": "https://github.com/IgorGanapolsky" },
|
|
24
|
-
"publisher": { "@type": "Organization", "name": "ThumbGate", "url": "https://thumbgate.ai" },
|
|
25
|
-
"datePublished": "2026-04-22",
|
|
26
|
-
"dateModified": "2026-04-22",
|
|
27
|
-
"mainEntityOfPage": "https://thumbgate.ai/guides/multica-thumbgate-setup"
|
|
28
|
-
}
|
|
29
|
-
</script>
|
|
30
|
-
<style>
|
|
31
|
-
:root { --bg: #0a0a0b; --bg-raised: #111113; --bg-card: #161618; --line: #222225; --text: #e8e8ec; --muted: #8b8b96; --cyan: #22d3ee; --green: #4ade80; --red: #f87171; }
|
|
32
|
-
* { box-sizing: border-box; }
|
|
33
|
-
body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: var(--bg); color: var(--text); line-height: 1.65; }
|
|
34
|
-
a { color: var(--cyan); text-decoration: none; } a:hover { text-decoration: underline; }
|
|
35
|
-
.container { max-width: 820px; margin: 0 auto; padding: 0 24px; }
|
|
36
|
-
.topbar { position: sticky; top: 0; z-index: 20; backdrop-filter: blur(12px); background: rgba(10,10,11,0.88); border-bottom: 1px solid var(--line); }
|
|
37
|
-
.topbar .container { display: flex; justify-content: space-between; align-items: center; padding: 14px 24px; }
|
|
38
|
-
.brand { font-weight: 700; color: var(--text); text-decoration: none; }
|
|
39
|
-
h1 { font-size: clamp(30px, 5vw, 46px); line-height: 1.15; margin: 40px 0 16px; }
|
|
40
|
-
h2 { font-size: 24px; margin: 36px 0 12px; color: var(--cyan); }
|
|
41
|
-
h3 { font-size: 18px; margin: 24px 0 8px; }
|
|
42
|
-
p, li { font-size: 17px; color: var(--text); }
|
|
43
|
-
.muted { color: var(--muted); }
|
|
44
|
-
code, pre { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 14px; }
|
|
45
|
-
pre { background: var(--bg-card); border: 1px solid var(--line); border-radius: 10px; padding: 16px; overflow-x: auto; }
|
|
46
|
-
code.inline { background: var(--bg-card); padding: 2px 6px; border-radius: 4px; color: var(--cyan); }
|
|
47
|
-
.eyebrow { display: inline-block; padding: 6px 12px; border-radius: 999px; border: 1px solid rgba(34,211,238,0.22); background: rgba(34,211,238,0.1); color: var(--cyan); text-transform: uppercase; letter-spacing: 0.08em; font-size: 12px; font-weight: 700; }
|
|
48
|
-
.cta { display: inline-block; background: var(--cyan); color: #000; padding: 14px 22px; border-radius: 10px; font-weight: 700; margin: 24px 0; }
|
|
49
|
-
article { padding: 24px 0 80px; }
|
|
50
|
-
footer { border-top: 1px solid var(--line); padding: 32px 0; color: var(--muted); font-size: 14px; }
|
|
51
|
-
</style>
|
|
52
|
-
</head>
|
|
53
|
-
<body>
|
|
54
|
-
<header class="topbar">
|
|
55
|
-
<div class="container">
|
|
56
|
-
<a class="brand" href="/">ThumbGate</a>
|
|
57
|
-
<nav><a href="/guides/">Guides</a> · <a href="https://github.com/IgorGanapolsky/ThumbGate">GitHub</a></nav>
|
|
58
|
-
</div>
|
|
59
|
-
</header>
|
|
60
|
-
|
|
61
|
-
<main class="container">
|
|
62
|
-
<article>
|
|
63
|
-
<span class="eyebrow">Setup Guide</span>
|
|
64
|
-
<h1>Multica + ThumbGate: Pre-Action Checks for Self-Hosted Agent Autopilot</h1>
|
|
65
|
-
<p class="muted">Multica gives your AI agent a VPS, root shell, and a scheduled cron. The quiet risk: autopilot magnifies tool-call mistakes. This guide shows how to drop ThumbGate in front of your Multica-hosted agent so the wrong pattern never runs twice — much less every morning at 9am.</p>
|
|
66
|
-
|
|
67
|
-
<h2>Why Multica needs a guard layer</h2>
|
|
68
|
-
<p>Multica is self-hosted agent orchestration: Docker, Postgres, a kanban UI, and CLI agents (Claude Code, OpenCode, Code CLI) running as jobs on your VPS. Autopilot schedules recurring work — "every day at 9am, fetch these RSS feeds, pick the 10 best articles, draft a YouTube video."</p>
|
|
69
|
-
<p>That is powerful, and it is exactly where tool-call mistakes get expensive:</p>
|
|
70
|
-
<ul>
|
|
71
|
-
<li>An agent that force-pushes once is a cleanup.</li>
|
|
72
|
-
<li>An agent that force-pushes every morning because a scheduled job hits the same pattern is a production incident on a cron.</li>
|
|
73
|
-
<li>Prompt rules (<code class="inline">CLAUDE.md</code>, <code class="inline">.cursorrules</code>) don't survive this. The context window rolls, autopilot fires fresh context, the bad pattern repeats.</li>
|
|
74
|
-
</ul>
|
|
75
|
-
|
|
76
|
-
<h2>What ThumbGate adds</h2>
|
|
77
|
-
<p>ThumbGate is the tool-call-boundary enforcement layer. It runs as an MCP server on the same VPS as your Multica-hosted agent and maintains a local SQLite lesson database at <code class="inline">.thumbgate/memory.sqlite</code>. Every thumbs-down becomes a row. On every subsequent tool call, ThumbGate checks the proposed call against the DB and blocks known-bad patterns — <code class="inline">git push --force</code>, <code class="inline">rm -rf</code>, <code class="inline">curl ... | sh</code>, cloud mutations, writes to <code class="inline">.env</code> and <code class="inline">.git/</code> — before the command executes.</p>
|
|
78
|
-
<p>No cloud service, no account, no vendor lock-in. The lesson DB lives next to the agent on your VPS.</p>
|
|
79
|
-
|
|
80
|
-
<h2>Install inside Multica</h2>
|
|
81
|
-
<p>There is no <code class="inline">--agent multica</code> flag because Multica is a runtime, not an agent. Multica invokes Claude Code or OpenCode as the actual terminal agent. ThumbGate wraps the underlying CLI with the install commands you already know:</p>
|
|
82
|
-
<pre><code># On the VPS where Multica runs
|
|
83
|
-
cd /path/to/project
|
|
84
|
-
|
|
85
|
-
# For Claude Code (most common)
|
|
86
|
-
npx thumbgate init --agent claude-code
|
|
87
|
-
|
|
88
|
-
# Or OpenCode
|
|
89
|
-
npx thumbgate init --agent opencode</code></pre>
|
|
90
|
-
<p>The installer writes the MCP server config, wires the PreToolUse hook, creates <code class="inline">.thumbgate/memory.sqlite</code>, and prints every file it touched so you can roll back.</p>
|
|
91
|
-
|
|
92
|
-
<h2>Verify it is working</h2>
|
|
93
|
-
<pre><code>npx thumbgate verify --agent claude-code</code></pre>
|
|
94
|
-
<p>Then in the Multica UI, create a test issue that asks the agent to run <code class="inline">git push --force</code> on a dummy branch. Inspect the execution history — the agent should hit the PreToolUse hook first and refuse. Capture the refusal with a thumbs-up; that teaches ThumbGate your enforcement preference persists.</p>
|
|
95
|
-
|
|
96
|
-
<h2>Autopilot + ThumbGate: the right mental model</h2>
|
|
97
|
-
<p>Multica's autopilot creates an Issue on each scheduled run, which the assigned agent picks up. The agent runs in a fresh session every time, which is precisely why prompt-level rules decay. ThumbGate's lesson DB is the piece of memory that survives the session reset:</p>
|
|
98
|
-
<ul>
|
|
99
|
-
<li>Session 1: autopilot fires, agent proposes bad pattern, you thumbs-down.</li>
|
|
100
|
-
<li>Session 2 (tomorrow 9am): autopilot fires, agent proposes the same pattern, PreToolUse hook reads the DB, blocks the call, agent tries a different approach — zero token spend on the repeat.</li>
|
|
101
|
-
</ul>
|
|
102
|
-
|
|
103
|
-
<h2>Local-only vs VPS tradeoffs</h2>
|
|
104
|
-
<p>Multica can run local-only or on a Tailscale-protected VPS. ThumbGate works identically in both:</p>
|
|
105
|
-
<ul>
|
|
106
|
-
<li><strong>Local-only Multica:</strong> <code class="inline">.thumbgate/memory.sqlite</code> lives on your dev machine. Best for sensitive repos.</li>
|
|
107
|
-
<li><strong>VPS Multica:</strong> the SQLite file lives on the same VPS as the agent. Backs up as part of your regular VPS snapshots. Survives Multica upgrades, OS rebuilds, even a Multica sunset.</li>
|
|
108
|
-
</ul>
|
|
109
|
-
<p>The lesson DB is portable by design. If Multica ever gets replaced by the next orchestrator, you copy one file and the institutional memory moves with you.</p>
|
|
110
|
-
|
|
111
|
-
<a class="cta" href="https://github.com/IgorGanapolsky/ThumbGate">Install ThumbGate →</a>
|
|
112
|
-
|
|
113
|
-
<h2>FAQ</h2>
|
|
114
|
-
<h3>Do I need a separate Multica adapter?</h3>
|
|
115
|
-
<p>No. Multica invokes Claude Code or OpenCode as subprocesses. Both are first-class ThumbGate-supported agents.</p>
|
|
116
|
-
|
|
117
|
-
<h3>Does ThumbGate work with Multica's "Talk directly to agent" mode?</h3>
|
|
118
|
-
<p>Yes. The PreToolUse hook runs on every tool call, regardless of whether the call originated from an issue, an autopilot run, or direct chat.</p>
|
|
119
|
-
|
|
120
|
-
<h3>What happens if the ThumbGate MCP server is down?</h3>
|
|
121
|
-
<p>The PreToolUse hook fails closed by default — tool calls that can't reach the gate are blocked. You can relax to fail-open via <code class="inline">.thumbgate/config.json</code> if your workflow prefers availability over strictness.</p>
|
|
122
|
-
|
|
123
|
-
<h3>Does thumbsing down in Multica's UI talk to ThumbGate?</h3>
|
|
124
|
-
<p>Not directly. Multica's issue statuses ("In review") are workflow signals, not tool-call feedback. Capture ThumbGate feedback via <code class="inline">npx thumbgate capture down "context"</code> in the agent's shell. Future work: a Multica webhook that forwards issue-close reasons as ThumbGate feedback.</p>
|
|
125
|
-
</article>
|
|
126
|
-
</main>
|
|
127
|
-
|
|
128
|
-
<footer>
|
|
129
|
-
<div class="container">
|
|
130
|
-
<p>ThumbGate — pre-action checks for AI coding agents. <a href="https://github.com/IgorGanapolsky/ThumbGate">GitHub</a> · <a href="/">Home</a></p>
|
|
131
|
-
</div>
|
|
132
|
-
</footer>
|
|
133
|
-
</body>
|
|
134
|
-
</html>
|