dtwin Gateway
dtwin Gateway · MCP darvoza

AI agentlar uchun tunnel.

Claude Code, Cursor yoki istalgan MCP-agent ichki Jira, GitLab va SQL'ni o'qiydi — faqat ruxsat berilganini. Niqob, audit va kill-switch bilan.

01 · Muammo

Agentga parol bermang.

Agentga Jira tokeni va DB parolini berish oson, lekin keyin kim nimani o'qiganini bilib bo'lmaydi. Gateway agentga bitta shaxsiy token beradi.

  • 1Sirlar ofisda qoladi
  • 2Har chaqiruv jurnalga yoziladi
Oddiy yo'l · agent .env
JIRA_TOKEN=jira_••••••••
GITLAB_TOKEN=glpat-••••••
DB_USER=sa
DB_PASSWORD=••••••••••
  • ✕Parollar agent qo'lida
  • ✕Jurnal yo'q
  • ✕To'xtatib bo'lmaydi
→
Gateway bilan
Authorization:
Bearer ag_aziz_••••
  • Faqat ruxsat etilgan toollar
  • Har chaqiruv auditda
  • Bitta tugma bilan to'xtaydi
02 · Qanday ishlaydi

Bitta darvoza — to'liq nazorat.

Agent faqat gateway bilan gaplashadi. Gateway tekshiradi, niqoblaydi, yozib qo'yadi va so'rovni tunnel orqali ofisdagi konnektorga uzatadi.

  • 1MCP Streamable HTTP
  • 2Konnektor faqat 127.0.0.1 da tinglaydi
Ofis tarmog'i
tunnel
Claude Code
Cursor
MCP-klient
gateway.dtwin.uz
token
ruxsat
limit
niqob
audit
konnektor
127.0.0.1
Jira
GitLab
SQL
03 · Ulanish

Uch qadam — bitta buyruq.

Admin agent yaratadi, siz token olasiz va bitta buyruqni ishga tushirasiz. Claude Code, Cursor yoki istalgan MCP-klient.

  • 1Token faqat bir marta ko'rsatiladi
  • 2Cursor uchun JSON konfig ham bor
1Admin agent yaratadipanel → Agentlar
2Token sizga beriladiag_aziz_…
3Bitta buyruqclaude mcp add
~/acme-pay — zsh
$ claude mcp add --transport http dtwin https://gateway.dtwin.uz/mcp --header "Authorization: Bearer ag_aziz_q7Lm2X…"
✓ Added HTTP MCP server dtwin with URL: https://gateway.dtwin.uz/mcp
$ claude
● dtwin · ulandi · 5 ta tool ochiq
Claude CodeCursoristalgan MCP-klient
04 · Shaxsiy token

Token — bir marta, shaxsan.

Har agentga alohida ag_<nom>_… token. Serverda faqat sha256 xeshi saqlanadi — ochiq token hech qayerda qolmaydi.

  • 120 xato / 10 daqiqa — IP bloklanadi
  • 2Istalgan payt yangilash (rotate)

Yangi agent

Nom
aziz
Egasi
Aziz (backend)
Toollar
acme-jira_*, acme-gitlab_mr*, acme-sql_query
Limit
30 / daqiqa
Yaratish
ag_aziz
ag_aziz_q7Lm2Xv9Tc4Rb8Np1Kd6Wf3Hs5Jy0GaE
⚠ Faqat hozir ko'rinadi — nusxalang
Nusxa
Serverda saqlanadi sha256 · 4f9a1c0e…d27be20d
Brute-force tormozi
20/ 20noto'g'ri urinish · bitta IP
IP 10 daqiqaga bloklandi
05 · Jonli misol

Bitta savol — uch tizim.

Dasturchi Claude'dan so'raydi. Agent o'zi Jira, GitLab va stage DBni o'qiydi va javobni dalil bilan beradi.

  • 1Har qadam admin panelida ko'rinadi
  • 2Ma'lumot niqoblangan holda keladi
claude · ~/acme-paydtwin · MCP
> PAY-142 nega yiqildi?
● dtwin - acme-jira_issue (key: "PAY-142")
└ Reopened · 4 ta komment · bog'langan MR !318
● dtwin - acme-gitlab_mr (iid: 318)
└ +12 −3 · InvoiceTotal yaxlitlash o'zgargan
● dtwin - acme-sql_query (db: "stage", sql: "SELECT TOP 20 Id, Total …")
└ 3 qator · 41 ms · ROLLBACK
● Sabab !318 da: jami endi 2 xonagacha yaxlitlanadi va stage'da 3 ta dbo.Invoice qatorida 0.01 farq chiqadi. Dilnoza (QA) ko'rgan xato aynan shu.
◆3 tool · 0 rad · 4 maydon niqoblandi
06 · Chaqiruv yo'li

Har paket — olti nazoratdan.

tools/call kelgach token, ruxsat va limit tekshiriladi, konnektor javobi esa niqoblanib va jurnalga yozilib qaytadi.

  • 1Rad etilgan chaqiruv ham yoziladi
  • 2Natijada nechta maydon niqoblangani bor
{ "jsonrpc": "2.0", "id": 7, "method": "tools/call", "params": { "name": "acme-sql_query", "arguments": { "db": "stage", "sql": "SELECT TOP 20 Id, Total FROM dbo.Invoice WHERE …" } } }
tools/call
Tokensha256 ✓
Ruxsatallowlist
Limit12 / 30
Konnektor41 ms
Niqob4 maydon
AuditJSONL + SSE
agentga natija3 qator4 niqob63 ms
07 · Ruxsatlar

Ruxsat yo'q — tool ham ko'rinmaydi.

Admin har agentga glob bilan ro'yxat beradi: *, acme-jira_*, acme-sql_query. Ro'yxatda yo'q tool tools/list'da ko'rinmaydi, chaqirilsa rad etiladi.

  • 1Daqiqasiga limit, odatiy 30
  • 2Bitta agentni pauza qilish mumkin
AZ
aziz
Aziz (backend)
on
Ruxsatlar · glob
acme-jira_*acme-gitlab_mr*acme-sql_query
Limit · daqiqasiga
12 / 30
tools/call → acme-sql_schema ✕ rad · ruxsat yo'q
tools/list · agent ko'radi
acme-jira_search✓
acme-jira_issue✓
acme-gitlab_mrs✓
acme-gitlab_mr✓
acme-gitlab_fileyashirin
acme-gitlab_searchyashirin
acme-gitlab_commitsyashirin
acme-sql_schemayashirin
acme-sql_query✓
08 · Niqoblash

Shaxsiy ma'lumot — agentga yetmaydi.

Har natija agentga ketishdan oldin tekshiriladi: PINFL, pasport, telefon, email, karta, token yashiriladi. Nechta maydon niqoblangani har chaqiruvda ko'rinadi.

  • 1INN (STIR) — ixtiyoriy
  • 2Panelda turma-tur yoqiladi
acme-sql_query · natija
phone+998 ** *** ** 67
phone+998 ** *** ** 34
phone+998 ** *** ** 40
pinfl31**********56
inn301234567
4
Bu chaqiruvda niqoblandi
telefon ×3PINFL ×1
Niqob turlari
PINFL30**********56
PasportAB*****67
Telefon+998 ** *** ** 67
Emaila***@mail.uz
Karta**** **** **** 1234
JWT / tokenPassword=***
INNixtiyoriy
09 · SQL guard

DELETE? Yo'q.

Guard faqat bitta SELECT yoki WITHni o'tkazadi. INTO, EXEC, sp_/xp_, OPENROWSET, WAITFOR, «;» — so'rov bazaga yetmasdan to'xtaydi.

  • 1Rad etilgan so'rov auditda qoladi
  • 2Konnektor darajasida tekshiriladi
acme-sql_query · stage
DELETE FROM dbo.Invoice WHERE Status = 3
✕ RAD ETILDIfaqat bitta SELECT / WITH ruxsat etilgan
TaqiqlanganDELETEUPDATEINSERTINTOEXECsp_ / xp_OPENROWSETWAITFOR;
acme-sql_query · stage
SELECT TOP 20 Id, Total FROM dbo.Invoice WHERE Total % 0.01 <> 0
✓ o'tdi · 3 qator · 41 msROLLBACK
10 · Faqat o'qish

Yozib bo'lmaydi — tuzilishidan.

Guard o'tkazgan so'rov ham READ UNCOMMITTED tranzaksiyada yuradi va har doim orqaga qaytariladi. Prod'da esa DB darajasidagi read-only login.

  • 130 soniya timeout
  • 2Ko'pi bilan 200 qator
SQL guardbitta SELECT / WITH
TranzaksiyaREAD UNCOMMITTED
Vaqt30 s timeout
Hajm≤ 200 qator
Yakunhar doim ROLLBACK
ProdDB read-only login
connector · sql
BEGIN TRAN
SET ISOLATION LEVEL
READ UNCOMMITTED
SELECT TOP 20 Id, Total
FROM dbo.Invoice …
-- 3 rows · 41 ms
ROLLBACK
ROLLBACK ✓
0o'zgarishlar
11 · Audit

Kim, nima, qachon — hammasi yozilgan.

Agent, tool, niqoblangan argumentlar, holat, ms, bayt va niqob soni. JSONL 30 kun saqlanadi, panelga SSE orqali jonli keladi.

  • 1Agent va kun bo'yicha filtr
  • 2Argumentlar ham niqoblanadi
vaqtagenttoolholatmsniqob
14:03:02azizacme-jira_searchok1880jql: "project = PAY AND status = Reopened"
14:02:40dilnozaacme-sql_queryrad20sql: "DELETE FROM dbo.Invoice …"
14:02:15azizacme-sql_queryok414db: "stage", sql: "SELECT TOP 20 Id, Total …"
14:02:13azizacme-gitlab_mrok3880iid: 318
14:02:11azizacme-jira_issueok2120key: "PAY-142"
14:01:57ci-botacme-gitlab_commitsok1640ref: "main", limit: 20
SSEdata/log/2026-11-02.jsonl · 30 kun saqlanadi
12 · Jonli panel

Har chaqiruv — ko'z oldingizda.

Agentlardan yadroga, yadrodan konnektorlarga oqim. Qizil chaqnash — rad etilgan chaqiruv, binafsha — niqoblangan ma'lumot.

  • 13D oqim + lenta + statistika
  • 2Bitta sahifa, kiritish shart emas
gateway.dtwin.uz/adminJONLI
gateway yadro azizdilnozaci-bot acmeacme-qa
1 284chaqiruv
17rad
3xato
342niqob
84p50 · ms
410p95 · ms
13 · Kill-switch

Bitta tugma — hammasi to'xtaydi.

Shubhali holatda admin kill-switchni bosadi: birorta agent chaqiruvi o'tmaydi. Bitta agentni pauza qilish yoki bitta konnektorni o'chirish ham mumkin.

  • 1Qayta yoqish ham bitta tugma
  • 2Sabab jurnalga yoziladi
gateway.dtwin.uz/admin · kill-switch
Kill-switch yoqilgan · chaqiruvlar rad etiladi
HAMMASINI TO'XTATISH
Agentlar
AZ
azizAziz (backend)
faolPauza
DI
dilnozaDilnoza (QA)
faolPauza
CI
ci-botCI
faolPauza
Konnektorlar
acmetunnel · 9 tools
faolO'chirish
14 · Sirlar ofisda

Parollar — ofisdan chiqmaydi.

DB parollari, Jira va GitLab tokenlari faqat ofisdagi kichik konnektorda turadi. Konnektor 127.0.0.1 da ishlaydi va gateway'ga tunnel.dtwin.uz orqali ulanadi.

  • 1Gateway konnektorga bearer secret bilan murojaat qiladi
  • 2tunnel.dtwin.uz — qardosh mahsulot
Bulut
gateway.dtwin.uz
0sirlar
sha256auditpolicy
Ofis tarmog'i
konnektor
127.0.0.1:8095 · Bearer
stage DB · read-only login
Jira tokeni
GitLab tokeni
tunnel.dtwin.uzbearer secret
15 · Toollar

To'qqiz tool — hammasi o'qish uchun.

Jira, GitLab va SQL — dasturchi har kuni so'raydigan narsalar. npm dependency yo'q, bitta kichik konteyner.

  • 1Tool nomi konnektor nomi bilan: acme-…
  • 2Yangi konnektor — yangi toollar
jira_searchJQL bo'yicha qidiruv
jira_issuetavsif + kommentlar + bog'lanishlar
gitlab_mrsMR'lar ro'yxati
gitlab_mrtavsif + diff
gitlab_filefayl, qator oralig'i bilan
gitlab_searchkod bo'yicha qidiruv
gitlab_commitscommitlar tarixi
sql_schemajadval va ustunlar
sql_querySELECT · ≤ 200 qator
read-only0 npm dependencybitta konteynerNode 20+
16 · Inson tasdig'i Tez kunda

Xavfli qadam — inson tasdig'i bilan.

Agent Jira'ga komment yozmoqchi bo'lsa, so'rov panel yoki Telegramga keladi. Admin tasdiqlamaguncha hech narsa yozilmaydi.

  • 1Yozish toollari faqat tasdiq bilan
  • 2Kim tasdiqlagani auditda
Tasdiq so'roviTez kunda
aziz → acme-jira_comment
PAY-142: tuzatish !318 da, stage'da tekshirildi.
TasdiqlashRad etish
✓ Tasdiqlandi · admin · 14:05
claude
● acme-jira_comment
└ admin tasdig'i kutilmoqda…
└ ✓ komment qo'shildi
17 · Yo'l xaritasi

Keyingi qadamlar — reja tayyor.

Gateway o'sib boradi: yozish toollari, nozik siyosatlar va yangi konnektorlar. Belgi bilan ajratilgan.

Inson tasdig'ipanel yoki Telegram'daTez kunda
Yozish toollarimasalan, Jira komment — tasdiq bilanTez kunda
Prod DB siyosatiqator va ustun darajasidaTez kunda
Log konnektoriSeq / GrafanaTez kunda
Token va xarajathar agent bo'yicha hisobTez kunda
Anomaliya ogohlantirishidarhol Telegram'gaTez kunda
OAuth loginMCP auth — statik token o'rnigaTez kunda
Chaqiruvni qayta o'ynatishreplay, tahlil uchunTez kunda
Multi-tenantboshqa kompaniyalar uchunTez kunda
Boshlash

Agentni bugun ulang.

Admin'dan token oling va bitta buyruqni ishga tushiring — keyin agentdan istalgan taskni so'rang.

← → yoki bosing · P pauza · O hammasi · F to'liq ekran
pauza · davom etish uchun P yoki ▶

dtwin Gateway · barcha bo'limlar