NessGate

com.nessgate由 nessgate.com 發布官方發布者v1.22.2更新於 Nov 1, 2026

Resolve a domain to its published AI interfaces: discovery, readiness, and connection plans.

已驗證Streamable HTTP可網頁執行網頁搜尋與抓取開發者工具

概覽

AI 產生的概覽

遠端 MCP 伺服器,把網域解析成它公開的 AI 介面,並針對指定用戶端回傳附來源的連線方案。

可以做什麼
  • 在標準機器探索位置讀取網域公開的內容,回傳一份附來源連結的正規化結果
  • 比對用戶端宣告的能力與網域公開的介面,給出連線方案(協定、端點、傳輸方式、驗證中繼資料)或指出缺少的欄位
  • 依資源檢查連線就緒狀態,指出服務究竟缺少哪個欄位
適用情境
當助理只拿到一個網域、需要釐清如何連上該服務時,或需要判斷某網域公開的代理、MCP 或 API 介面是否完整到可以連線時使用。
執行需求
位於 nessgate.com 的遠端 Streamable HTTP 端點;未宣告驗證、API 金鑰或環境變數。用戶端以自己的憑證直接連線目標服務。
安裝前請注意
唯讀查詢:伺服器會抓取所請求網域上的公開 well-known 檔案,不儲存網域資料,但請求會向託管服務揭露你正在調查哪些網域。目標服務的憑證由用戶端提供,不會經過 NessGate。結果只報告網域公開的內容,不對歸屬或安全性作任何聲明,採用連線方案前請自行核實。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 NessGate,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/com.nessgate%2Fnessgate/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "nessgate": {
      "type": "http",
      "url": "https://nessgate.com/mcp"
    }
  }
}

README

NessGate

Give NessGate a domain and your client's capabilities, and it tells you how that client can connect — and what's still missing. One call turns "here's a domain" into a concrete, sourced connection plan: which protocol to use, at which endpoint, over which transport, and exactly what authentication the service published — or, if it can't be done yet, the precise field the service is missing.

bash
curl -sX POST https://nessgate.com/connect/supabase.com \  -H 'content-type: application/json' \  -d '{"client":{"supports":[{"protocol":"mcp","auth":["oauth2","none"]}]}}'
jsonc
{  "domain": "supabase.com",  "outcome": "credentials-required",          // ready | credentials-required | incomplete | no-compatible-method  "connection": {    "protocol": "mcp",  "transport": "streamable-http",    "endpoint": "https://mcp.supabase.com/mcp",    "auth": { "type": "oauth2",              "authorizationEndpoint": "https://api.supabase.com/v1/oauth/authorize",              "tokenEndpoint":         "https://api.supabase.com/v1/oauth/token",              "scopes": ["projects:read", "database:write", "…"] }  }}// → everything needed to connect is known; you just supply your own credentials//   (which never touch NessGate). No scores; each field links back to its source.

Five honest outcomes, never a guess: ready (connect now, no credentials), credentials-required (everything's known — bring your own secret), incomplete (the service under-published — NessGate names the exact missing field), broken (the declared location answers and contradicts its own declaration), no-compatible-method (nothing your client speaks). Prefer the per-resource view? Add ?readiness=1 to /explore. Prefer the raw list of what a domain publishes? That's the original resolver, GET /discover/{domain} — unchanged and still here.

Why not just build this yourself?

You can — it's not impossible, just permanent. To turn a domain into a working connection you'd have to read and track every discovery standard (ARD, A2A, llms.txt, api-catalog, OpenAPI, ORD, host-meta, ANP, UCP, AID, MCP, GB/Z 185.4…), follow each one's auth story (OpenAPI security schemes, the MCP OAuth metadata chain RFC 9728 → RFC 8414, A2A card schemes), handle server quirks, timeouts, redirects, and SSRF safety on every hop, normalize it all into one shape, and keep doing that as the protocols change. NessGate does exactly that, reads on demand, stores no discovered domain or resource data, and stays neutral — so you write your agent, not a compatibility layer. It's free, open (Apache-2.0), and independently implementable; if nessgate.com vanished, every domain's files would still stand on the domain itself.

The reverse direction — describing what an incoming automated caller declares and can prove — is the experimental package @nessgate/inspect (0.x): tiered, provenanced facts (claimed / cryptographically-verified / network-verified / directory-attributed), no decisions, no scores. See docs/integrations.md §5.

Publishing a service? Test yourself before agents do:

bash
npx @nessgate/resolver yourdomain.com    # exit 0 = agents can connect; otherwise it names the exact missing field

Runs the open readiness predicate on your machine (nothing reported anywhere), 3 observations, strict: flaky endpoints fail. Put it in CI to keep your publication connectable.

Live at https://nessgate.com · Specification · Charter · API

NessGate reads the standards a domain already publishes; it defines none of them and stores nothing. The domain is always the authority.

Use it

Embeddable library — dependency-free, fetches the target domain directly (no runtime dependency on nessgate.com), runs anywhere with fetch — Node, Deno, Workers, and agent runtimes. (It runs in a browser too, but a browser can only read other domains that send CORS headers, and most .well-known files don't — so from a browser, resolve arbitrary domains via the hosted endpoint below, which sends open CORS.) Published as @nessgate/resolver:

js
import { resolve } from "@nessgate/resolver";      // or "https://nessgate.com/resolver.mjs"const { resources } = await resolve("example.com");

Hosted endpoint — open CORS, no auth:

curl https://nessgate.com/discover/example.com

MCP — the same lookup as a tool (discover_domain) at https://nessgate.com/mcp. Listed in the official MCP Registry as com.nessgate/nessgate (domain-verified remote server), so MCP-aware clients can install it directly.

Integrate it (≈5 lines)

Give an agent a domain, get back what to use — no per-standard code. Drop this into a tool, a retrieval step, or an onboarding flow:

js
import { resolve } from "@nessgate/resolver";           // dependency-free, no key, no accountconst { resources } = await resolve(domain);            // reads the domain directlyfor (const r of resources)  console.log(r.type, r.url, "←", r.sourceUrl);         // normalized record + where it came from// each r: { source, type, url, sourceUrl } — pick the one your agent needs (OpenAPI, A2A, MCP, …)

No SDK? The hosted endpoint is one HTTP GET (GET https://nessgate.com/discover/{domain}, open CORS, no auth), and the MCP tool discover_domain returns the same shape. Adding a new standard is a new adapter upstream — integrations don't change.

Full integration guide — library, HTTP, and MCP client config (including the mcp-remote bridge for stdio-only clients): docs/integrations.md.

Principles

NessGate is free, neutral infrastructure — see the Charter. It never charges to use or to be read, never sells ranking or placement (there is none), keeps no accounts, and stores no domain data. It reads a domain on demand (answers are cached at the edge for up to 10 minutes), never crawls or indexes, and makes no ownership or safety claim — it reports what a domain serves and links back to each source. The specification is open and the reference implementation is Apache-2.0 licensed: anyone may run their own resolver, and if nessgate.com disappeared, every domain's files would still stand on the domain itself.

Architecture

  • One stateless Cloudflare Worker (src/worker.js) serves the static site (public/, via the assets binding with run_worker_first), the resolver API, the MCP server, the per-domain pages, and the sitemap. There is no database.

  • The resolver (GET /discover/{domain}, and the embeddable public/resolver.mjs) reads what a domain publishes, normalizes it into one answer, fetches the domain directly, and stores nothing. Answers are computed fresh and cached at the edge for 10 minutes. A parity test keeps the worker's and the library's normalization byte-identical, and keeps packages/resolver/index.mjs (the npm package) byte-identical to public/resolver.mjs.

  • Adapter architecture — four discovery channels. Each supported standard is a small, independent adapter, and every adapter uses one of four channels to locate its document:

    • well-known — GET a fixed path (or paths) on the domain: llms.txt, ard-catalog (ARD / ai-catalog), a2a-agent-card (A2A), api-catalog (RFC 9727), ai-info.json, openapi, ord (Open Resource Discovery), awp (draft), host-meta (RFC 6415), anp (Agent Network Protocol /.well-known/agent-descriptions), and ucp (Universal Commerce Protocol /.well-known/ucp).
    • link-rel — parse <link rel="ard"> in the homepage, then GET the target (ard-link).
    • robots — parse an Agentmap: directive in /robots.txt, then GET the target (ard-agentmap).
    • dns — a DoH TXT lookup at _agent.<domain> (aid: v=aid1;u=<uri>;p=<proto>;a=<auth>).

    ARD: NessGate implements ARD's normative domain resolution — it fetches /.well-known/ard.json and honours the <link rel="ard"> relation (both MUST in ARD v0.91 §5.1) — plus the robots Agentmap: surface. ARD's optional in-page JSON-LD is found only by general web crawling, which NessGate does not do; ARD's DNS mechanism is described in §5.1 but not yet normatively specified (no record type or parameters). Neither is implemented — publishing a guessed record would be fake conformance. ANP and UCP are emerging; the AID TXT record (v=aid1 at _agent) and AWP are drafts, read as-is with no adoption claim. Note: the aid adapter is the AID TXT mechanism, not the IETF DNS-AID draft (SVCB at _agents.<domain> — a separate, unimplemented mechanism).

  • GB/Z 185 (China, 智能体互联) — 185.4 yes, 185.5 gated. NessGate normalizes GB/Z 185.4 agent descriptions ("ACS"): an ACS is an A2A-family card with GB/Z extensions (an agent identity code aic, an mTLS scheme, a certificate block), recognized by content and labelled gbz-185-4, preserving those fields and provenance. Recognition is domain-first: an ACS served at the agent-description location NessGate already reads is normalized — no GB/Z-specific .well-known path is guessed. GB/Z 185.5 discovery is a federated gateway service with no domain-native location, so it is not part of the hosted resolver and is never auto-discovered. The embeddable library exposes it as an opt-in, Node-only call (resolve(domain, { gbz: { gatewayUrl, fetch, query } })) that POSTs to the reference implementation's real …/acps-adp-v2/discover endpoint with a caller-supplied authenticated fetch (bring-your-own mTLS/OIDC — NessGate embeds no credentials) and normalizes the ACS records it returns. No guessed endpoints, no fake conformance.

  • Cloudflare KV (NESSGATE_KV) holds only approximate, IP-keyed hourly rate-limit counters that expire within the hour. Nothing else is stored.

  • Rate limiting: a Cloudflare-native edge limiter (burst, per-colo and eventually consistent — approximate by design) in front of an approximate KV hourly cap. Abuse protection, not exact global accounting.

  • SSRF protections: DoH pre-check against private/reserved IPs, on-domain redirects only (≤ 3), 1 MB caps, 8 s timeouts, HTTPS-only. Probes are read-only GETs of public well-known paths; the DNS-rebinding TOCTOU window is documented in src/worker.js and is immaterial here (Worker egress has no private network behind it, and probes assert nothing).

  • No accounts, no emails, no stored domain data.

Endpoints

EndpointPurpose
GET /discover/{domain}The resolver. Reads what the domain publishes across the supported adapters (llms.txt, ARD/ai-catalog via well-known paths, rel="ard" link, and robots Agentmap:; A2A agent card, RFC 9727 api-catalog, ai-info.json, OpenAPI, ORD, AWP, host-meta, ANP, UCP, AID, GB/Z 185.4) and returns one normalized answer — {domain, provenance, note, discovered[], resources[], checked[]}, each resource carrying its source and native sourceUrl. CORS open, no auth; no discovered domain or resource data stored, nothing crawled; 10-min cache, 120/hr/IP.
GET /explore/{domain}Evidence-based resolver (v2, additive). Everything /discover returns, plus bounded delegated discovery: it follows the explicit machine-readable pointers a domain declares (an llms.txt index's links, ARD/api-catalog entries) up to depth 2 — cross-host only where the publisher named the target — and federates the official MCP Registry for the domain's verified namespace. Every record carries an evidence class (publisher-hosted / publisher-declared / namespace-verified) and a provenance chain. Strictly bounded (depth ≤2, ≤8 hosts, ≤24 requests, global byte cap, SSRF checks on every hop); stateless, no crawling, no AI, no ownership claim. With ?org=1 (Organization Discovery), it additionally probes a bounded set of plausible same-registrable-domain hosts (homepage-linked subdomains + a small conventional shortlist, max 6 hosts × 3 paths) and reports only verified resources as same-domain-host — solving the "resources live on developers.example.com, not example.com" case. /discover stays unchanged.
GET /explore/{domain}?readiness=1Connection-readiness (opt-in, additive). Everything /explore returns, plus a readiness block on each connectable resource assessed from the service's OWN published metadata: ready / credentials-required / incomplete (with missing[] naming the exact under-published field) / broken (declared but demonstrably fails), read-only, no scores. Resolves OpenAPI servers[]+securitySchemes, A2A cards, and the MCP OAuth metadata chain (RFC 9728 → RFC 8414). Bounded + SSRF-guarded; credentials never touch NessGate. Default /explore (no flag) is unchanged.
POST /connect/{domain}Connection plan. Body { client: { supports:[{protocol,versions?,transports?,auth?}], prefer? } }. Matches the client's declared capabilities against what the domain publishes (deterministic intersection, no scores) and returns one outcome — ready / credentials-required / incomplete / broken / no-compatible-method — with a connection plan (endpoint, transport, version, auth metadata) and its provenance. Read-only; client capabilities are input only (nothing stored); the client connects directly.
POST /mcpModel Context Protocol server (Streamable HTTP, stateless, no auth) exposing three read-only tools: discover_domain (same answer as /discover), connect_domain (same as POST /connect), and check_readiness (same as /explore?readiness=1).
GET /{domain}Human-readable domain page — the resolver rendered for humans (live discovery).
GET /resolver.mjsThe embeddable resolver library (also on npm as @nessgate/resolver).
GET /openapi.json, /llms.txt, /spec, /sitemap.xml, /robots.txt, /.well-known/security.txt, /.well-known/api-catalogMachine discovery & docs

Operations runbook

  • Deploy flow: commit → npm run deploy (runs the full regression suite as a hard pre-deploy gate, then stamps the build with the git SHA via BUILD_ID) → npm run check (regression tests + live smoke checks, including proof that /version on production equals local HEAD) → push. CI (GitHub Actions) runs the regression suite on every push. The deploy-script gate is the effective production gate, since deploys run from the workstation.
  • Build verification: GET /version and the X-NessGate-Build header on every response identify the exact deployed commit.
  • Tests: npm test — no-network regression suite for the security-critical logic (normalization, SSRF/private-IP detection, probe-content validation, thin normalization, and worker↔library↔npm parity).
  • Rollback: npm run rollback (or npx wrangler rollback [version-id]; versions listed by npx wrangler deployments list).
  • Logs: npx wrangler tail nessgate.
  • CSS changes: bump the ?v=N on the stylesheet link in all pages (assets are cached; unversioned CSS changes will not reach browsers).

Configuration

wrangler.toml binds: assets (run_worker_first), KV, and a [[ratelimits]] binding. There are no D1 databases, no cron triggers, and no secrets — the resolver is stateless.

npm package

packages/resolver/ is published as @nessgate/resolver via GitHub Actions Trusted Publishing (OIDC, tokenless, with provenance) — see .github/workflows/publish-resolver.yml. index.mjs is kept byte-identical to public/resolver.mjs by the parity test.

License & contributing

The reference implementation is licensed under Apache-2.0 (LICENSE); the WordPress plugin is GPL, as required by WordPress.org. The protocol is open and independently implementable — see CONTRIBUTING.md, the naming/trademark policy in TRADEMARK.md, and the Charter. Anyone may build a compatible resolver without asking permission; independent implementations are a goal, not a threat. The canonical resolver/normalization logic lives in public/resolver.mjs and src/worker.js (kept byte-identical by a parity test).

Security contacts

[email protected] (see /.well-known/security.txt), [email protected], [email protected], [email protected].

來源:README.md,提交 8ae7d7c

工具

3

discover_domain

Resolve a domain's machine-readable resources

Given a domain, read whatever it publishes at the standard machine-discovery locations (llms.txt, /.well-known/ard.json, /.well-known/agent-card.json, /.well-known/api-catalog, ai-info.json, openapi.json, and more) and return one normalized answer. Each resource keeps a sourceUrl pointing back to the domain so the caller can verify. NessGate reads the domain live and stores no discovered domain or resource data; it makes no ownership or safety claim.

輸入參數domain必填

connect_domain

Get a connection plan for this client

Given a domain AND the calling client's capabilities, return HOW the client can connect: one outcome (ready | credentials-required | incomplete | broken | no-compatible-method) with a connection plan (protocol, endpoint, transport, version, and the auth metadata the service published — e.g. the OAuth authorize/token endpoints and scopes), or the exact missing field when the service under-publishes. Deterministic matching, no scores. Read-only; credentials stay with the caller and are never sent to NessGate.

輸入參數clientdomain必填

check_readiness

Check how ready a domain's endpoints are to connect to

Given a domain, return each connectable resource it publishes with a readiness assessment (ready | credentials-required | incomplete | broken, with the exact missing field) read from the service's own metadata. Client-agnostic; read-only. Use connect_domain when you know the client's capabilities.

輸入參數domain必填

版本歷史

4
  1. v1.22.2最新Oct 4, 2026
  2. v1.22.1Oct 4, 2026
  3. v1.21.0Oct 3, 2026
  4. v1.6.0Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分