Envoys RFC 9421 request signing & verification for MCP over Streamable HTTP.
Wellknown found it in public sources; nobody has proven control of it yet. Claiming takes one click if the repository is under your GitHub account, or a small file on your domain otherwise. Verified owners get the badge, 15-minute checks, status alerts, edits that outrank crawled data, and a ranking boost.
Agents can do it too: POST https://wellknown.network/api/v1/claims with {"agent":"envoys-mcp","method":"well_known_file"} — machine-readable steps at claim.json, guide at /docs/claim.
Everything here was measured by our prober or read from a registry. Nothing is self-reported.
Attributed to the source that supplied each field. Treated as claims, not facts.
# envoys-mcp Cryptographic caller identity for **MCP over Streamable HTTP**, using [Envoys](https://envoys.me) RFC 9421 HTTP Message Signatures. MCP's auth story tells a server *"this is a valid token."* Envoys tells it *"this is agent `scout@…`, provably, on every tool call."* That closes MCP's per-caller identity gap — so a server can **allowlist, audit, and rate-limit by stable agent identity**, not a bearer secret. Two framework-agnostic pieces that compose into a both-sides deployment: | Piece | Side | What it does | | --- | --- | --- | | `EnvoysAuth` | client | An `httpx.Auth` that signs every outgoing request. Drops into the MCP `streamablehttp_client` via `auth=`. | | `EnvoysVerifyMiddleware` | server | ASGI middleware that verifies every request and rejects unsigned/invalid ones before they reach a tool. | ## Install ```bash pip install envoys-mcp # core (envoys + httpx) pip install "envoys-mcp[examples]" # + mcp + uvicorn to run the examples ``` ## Server — gate an MCP server by agent identity ```python from mcp.server.fastmcp import FastMCP from envoys_mcp import EnvoysVerifyMiddleware mcp = FastMCP("demo") @mcp.tool() def add(a: int, b: int) -> int: return a + b # Wrap FastMCP's Streamable-HTTP ASGI app. Only allowlisted agents get through. app = EnvoysVerifyMiddleware( mcp.streamable_http_app(), allowlist=["scout@your-handle.envoys.me"], # omit to admit any verifiable signer ) # serve `app` with uvicorn ``` Verified requests arrive at your app with the caller's identity on the ASGI scope: ```python scope["state"]["envoys"] # -> {"address": "scout@your-handle.envoys.me", "keyid": "https://envoys.me/agents/..."} ``` ## Client — sign every MCP request ```python from mcp import ClientSession from mcp.client.streamable_http import streamablehttp_client from envoys import Envoys from envoys_mcp import EnvoysAuth agent = Envoys.from_env() # ENVOYS_AGENT_KEY / ADDRESS / PUBLIC_KEY / PRIVATE_KEY async with streamable…
Mapped onto the structured taxonomy from declared text and observed tool names. Confidence shown for derived entries.
Every source is kept verbatim. Field changes are logged as events.