
uta-shield
io.github.eddyflores100-lang由 GitHub 帳號 eddyflores100-lang 發布v0.3.0更新於 Nov 5, 2026
Provider-side MCP firewall: identity, threat-intel, barter, rate limits, DLP, audit.
概覽
面向服務提供方的 MCP 防火牆與威脅情報工具:為自家 MCP 伺服器加上身分驗證、ACL、限流、DLP 與稽核,並附帶 PhishGuard IOC 查詢伺服器。
- 可以做什麼
- 離線比對網域、URL 與文字是否命中內建的釣魚活動情報,並以結束碼支援腳本化判斷
- 執行 PhishGuard MCP 伺服器,提供 IOC 查詢、URL 檢查、文字篩檢、活動清單與情報來源資訊
- 把現有 MCP 伺服器包在代理之後,驗證 HMAC 簽章的代理身分並套用依工具的 ACL
- 提供兩層限流、入站威脅情報攔阻、出站遮蔽/阻擋/記錄策略,以及機密資料的 DLP 遮罩
- 依呼叫計量並寫入 JSONL 稽核紀錄,可透過需管理員驗證的端點讀取
- 適用情境
- 當你營運一個對匿名代理開放的 MCP 伺服器或 SaaS 端點,想在不改動伺服器程式碼的前提下取得身分驗證、依工具授權、限流、機密資料遮罩與稽核時使用。也適合讓助理核對網域、URL 或文字是否命中已知釣魚活動。
- 執行需求
- 以 Node.js 18 以上版本在本機執行(npm 套件 uta-shield,stdio 傳輸);防火牆模式需要上游 MCP 伺服器位址、內含代理金鑰的 keys 檔案,另可選用管理員權杖與 ACL 檔案。內建情報來源未宣告需要帳號或 API 金鑰。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 uta-shield,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
uta-shield
Provider-side firewall for MCP servers + PhishGuard threat-intel MCP server — in one zero-dependency package.
Landing / docs: https://wall.utalabs.tech
Every gateway in the MCP security category (Lasso, Mintive, Obot, agentgateway, Cequence) protects the consumer — the company whose employees connect agents to third-party servers. Nothing protects the operator — the SaaS that publishes its MCP server and exposes its database to every anonymous agent on the internet.
uta-shield is the mirror side: you wrap YOUR MCP server and gain verified identity, per-tool authorization, threat-intel blocking (in AND out), two-tier rate limits, DLP masking, proxy hardening, per-call metering and a JSONL audit trail — without touching your server code.
Backed by a real, documented campaign: the taikotalent phishing case (fake-recruiter malware against open-source developers, domain taken down in ~12h, C2 infra tracked). The bundled feed ships its 23 verified IOCs.
Quickstart
Verified identity (v0.2.0, ACL strict mode v0.2.2)
Identity is no longer declared-only. Agents present three headers:
- Valid signature →
ALLOW_VERIFIED(per-agent rate buckets, ACL enforcement, metering). - Presented-but-invalid credentials →
REJECT_AUTH(401). Fail-closed, always. - No credentials →
REJECT_ANON(401) unless the operator passes--allow-anonymous. - Declared names (no signature) are labels only,
verified:false— they earn no per-agent rate bucket. - Per-tool ACL (
--acl-file): by default, agents absent from the map are unrestricted. For allow-list semantics, add--acl-deny-unlisted— unlisted agents get403 REJECT_FORBIDDENeven with a valid signature. The CLI refuses--acl-deny-unlistedwithout an ACL file (with no map, deny-unlisted would reject every agent)./healthdisclosesidentity.acl_deny_unlisted.
Signing a request (client side, any language):
The 8 layers
Honesty policy: this README marks exactly what ships. Layers 2 and 7 are design hooks — no inflated claims.
Proxy hardening (v0.2.1)
Known limitations (honest scope)
- Identity verification is HMAC-shared-secret (operator-issued keys). It authenticates agents to the operator; it is not a federated PKI.
/.well-known/agent.jsonorigin verification remains a supplementary hook. policy=logrecords outbound IOCs but passes them through — it exists for operators who explicitly opt in;redact(default) orblockare the safe choices.- Obfuscated-email and hex-secret DLP patterns are heuristic; false positives are possible (tune via
dlpoptions). - No TLS termination — run behind your existing reverse proxy (Caddy/nginx/certbot).
- The feed ships ONE documented campaign (23 IOCs). Feed data is CC-BY-4.0; extend it with your own campaigns.
Why zero dependencies?
A security product with 47 transitive dependencies is an attack surface, not a defense. uta-shield is ~1,600 lines of auditable Node.js ≥18 (ESM), including a hand-rolled MCP stdio implementation (newline-delimited JSON-RPC 2.0). npm pack ≈ 108 kB unpacked / 54 kB tarball.
The bundled feed
feed/iocs.json (schema pg/1) ships campaign taikotalent-2026-10: 23 IOCs across 9 types — phishing domain (down via registrar clientHold), live C2 domains behind Cloudflare, sender IP, fake recruiter email, stager URLs, sha256 of payloads, wildcard second-stage path (/var/tmp/.kdm.*), mutex name — with MITRE ATT&CK mapping (T1566.002, T1656, T1204.002, T1059.004, T1027, T1071.001, T1070.004, T1583.001) and per-IOC context. Every verdict carries this evidence so downstream agents can reason about WHY they were blocked.
Feed data CC-BY-4.0 from the public case repo. Update/extend it by adding a campaign object — schema validated by uta-shield verify-feed.
As an MCP server (for agents, not just operators)
Agents get the intel as tools: lookup_ioc(value), check_url(url) (feed + advisory heuristics), screen_text(text), list_campaigns(), feed_info(). Every response is DATA — the server never fetches or executes anything.
Commercial
Contact: AliceLabs LLC — [email protected]
Test (reproducible)
Independent execution: .github/workflows/tests.yml runs the full suite
on GitHub's own runners (Node 20/22/24) on every push — the results are public
and don't depend on this file's claims.
Test results for v0.2.2: see EVIDENCE.md (command, Node version, full runner summary).
Migration v0.1.0 → v0.2.0 (breaking)
wrapwithout--keys-file/UTA_SHIELD_KEYS/--allow-anonymousrefuses to start (fail-closed default).- Rate limits for unverified callers are keyed by IP; declared agent names no longer create per-agent buckets.
gateOutdefault behavior changed from pass-through toredact. SetoutboundPolicy:"log"for v0.1.0 behavior.- New verdicts in the audit stream:
ALLOW_VERIFIED,REJECT_AUTH,REJECT_FORBIDDEN,OUT_REDACTED,OUT_BLOCKED,UPSTREAM_ERROR.
Migration v0.2.0 → v0.2.1 (breaking)
GET /auditno longer works without credentials. Without--admin-token(orUTA_SHIELD_ADMIN) it answers 404; with a token it requires thex-uta-adminheader. Dashboards that scraped/auditanonymously must present the operator token. The response flagx-uta-shieldis now the exact core verdict —policy=logusers will seeOUTBOUND_INTELinstead of the previously mislabeled flag.
Migration v0.2.1 → v0.2.2
- Additive.
--acl-deny-unlistedenables opt-in strict ACL (allow-list semantics); the CLI refuses to start with that flag but no--acl-file(fail-closed). New audit verdicts:BODY_TOO_LARGE(both 413 paths — v0.2.1 addedAUDIT_DISABLED/AUDIT_DENIED). Public CI added — nothing else changes for existing operators.
Licensed for use — see LICENSE (license for use / licencia de uso). © 2026 AliceLabs LLC. Commercial exceptions (white label, OEM, redistribution, managed service): [email protected]
來源:README.md,提交 e31cbd8
工具
0版本歷史
2- v0.3.0最新Oct 29, 2026
- v0.2.4Oct 23, 2026
評分
已滿足適用檢查項的 40%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
請在儲存庫或註冊中心條目中宣告授權條款。