Nessgate
Universal resolver for the agentic web: give a domain, get one normalized discovery answer.
- Transport
- Not stated
- Package
- —
- Registry id
- com.nessgate/nessgate
No install snippet on purpose. A working MCP config is a command, its arguments and an environment block — the last two are where API keys live, so this catalogue never stores them and cannot publish them. Follow the link above for the authors' own instructions.
The open, neutral compatibility resolver for the agentic web. Give NessGate a domain and it
reads whatever that domain already publishes — across ARD (all three surfaces), A2A, llms.txt,
RFC 9727 api-catalog, Open Resource Discovery, RFC 6415 host-meta, OpenAPI, Agent Network Protocol
(ANP), Universal Commerce Protocol (UCP), AID, GB/Z 185.4 and more — and returns one normalized answer,
with a link back to each source so an agent can always verify against the domain itself.
company.com → { resources: [
{ source: "ard-catalog", type: "application/json",
url: "https://company.com/ai-info.json",
sourceUrl: "https://company.com/.well-known/ard.json" },
... ] }
One call instead of ten. NessGate reads these standards; it does not define or replace them — a new standard is just a new adapter, never a competitor. It reuses each source's own type labels and invents no taxonomy of its own. The domain is always the authority; NessGate only normalizes what the domain already publishes, reads it on demand, and stores nothing.
Live at https://nessgate.com · Specification · Charter · API
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:
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:
import { resolve } from "@nessgate/resolver"; // dependency-free, no key, no account
const { resources } = await resolve(domain); // reads the domain directly
for (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
From the project's README.