{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_xs8xgsytgaak","handle":"envoys-mcp","url":"https://wellknown.network/agents/envoys-mcp","links":{"self":"https://wellknown.network/agents/envoys-mcp/record.json","html":"https://wellknown.network/agents/envoys-mcp","markdown":"https://wellknown.network/agents/envoys-mcp/record.md","api":"https://wellknown.network/api/v1/agents/envoys-mcp","status":"https://wellknown.network/api/v1/agents/envoys-mcp/status","claim":"https://wellknown.network/agents/envoys-mcp/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/envoys-mcp/claim.json","badge":"https://wellknown.network/agents/envoys-mcp/badge.svg","openapi":"https://wellknown.network/openapi.json"},"ard":{"identifier":"urn:air::server:envoys-mcp","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"envoys-mcp","summary":"Envoys RFC 9421 request signing & verification for MCP over Streamable HTTP.","description":"# envoys-mcp\n\nCryptographic caller identity for **MCP over Streamable HTTP**, using [Envoys](https://envoys.me) RFC 9421 HTTP Message Signatures.\n\nMCP'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.\n\nTwo framework-agnostic pieces that compose into a both-sides deployment:\n\n| Piece | Side | What it does |\n| --- | --- | --- |\n| `EnvoysAuth` | client | An `httpx.Auth` that signs every outgoing request. Drops into the MCP `streamablehttp_client` via `auth=`. |\n| `EnvoysVerifyMiddleware` | server | ASGI middleware that verifies every request and rejects unsigned/invalid ones before they reach a tool. |\n\n## Install\n\n```bash\npip install envoys-mcp            # core (envoys + httpx)\npip install \"envoys-mcp[examples]\"  # + mcp + uvicorn to run the examples\n```\n\n## Server — gate an MCP server by agent identity\n\n```python\nfrom mcp.server.fastmcp import FastMCP\nfrom envoys_mcp import EnvoysVerifyMiddleware\n\nmcp = FastMCP(\"demo\")\n\n@mcp.tool()\ndef add(a: int, b: int) -> int:\n    return a + b\n\n# Wrap FastMCP's Streamable-HTTP ASGI app. Only allowlisted agents get through.\napp = EnvoysVerifyMiddleware(\n    mcp.streamable_http_app(),\n    allowlist=[\"scout@your-handle.envoys.me\"],   # omit to admit any verifiable signer\n)\n# serve `app` with uvicorn\n```\n\nVerified requests arrive at your app with the caller's identity on the ASGI scope:\n\n```python\nscope[\"state\"][\"envoys\"]  # -> {\"address\": \"scout@your-handle.envoys.me\", \"keyid\": \"https://envoys.me/agents/...\"}\n```\n\n## Client — sign every MCP request\n\n```python\nfrom mcp import ClientSession\nfrom mcp.client.streamable_http import streamablehttp_client\nfrom envoys import Envoys\nfrom envoys_mcp import EnvoysAuth\n\nagent = Envoys.from_env()  # ENVOYS_AGENT_KEY / ADDRESS / PUBLIC_KEY / PRIVATE_KEY\n\nasync with streamable…","publisher":null,"homepage":"https://envoys.me","repository":"https://github.com/jschoemaker/Envoys-public/issues","version":"0.1.1","license":"Apache-2.0","protocols":["mcp"],"tags":["agent-identity","ai-agents","ed25519","envoys","http-signatures","mcp","model-context-protocol","rfc9421"],"pricing":null,"endpoints":[{"url":"pypi:envoys-mcp","type":"package_pypi","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":null,"attribution":{"kind":"pypi","name":"pypi","license":"pypi","repoUrl":"pypi","summary":"pypi","version":"pypi","description":"pypi","homepageUrl":"pypi"}},"derived":{"capabilities":[{"slug":"security.identity","name":"Identity & Access","confidence":1,"provenance":"derived"}],"categories":["security"],"language":"en"},"observed":{"status":"unknown","statusReason":"Distributed as a package to run locally; no network endpoint to check.","lastOkAt":null,"lastProbedAt":null,"statusComputedAt":null,"reliability30d":null,"latestObservations":[],"tools":null,"package":{"name":"envoys-mcp","registry":"pypi","observedAt":"2026-09-09T15:23:48.792Z","publishedAt":"2026-06-09T19:06:40.685613Z","latestVersion":"0.1.1"}},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"pypi","key":"envoys-mcp","url":"https://pypi.org/project/envoys-mcp/","firstSeenAt":"2026-09-09T15:21:37.135Z","fetchedAt":"2026-09-09T15:21:37.135Z","normalizedAt":"2026-09-09T15:21:37.135Z"}]},"firstSeenAt":"2026-09-09T15:21:37.135Z","updatedAt":"2026-09-09T15:23:48.792Z"}