Python SDK for protecting MCP servers and OAuth 2.1 resource servers with tokens issued by the Authplane authorization server. Includes framework adapters (e.g. MCP, FastMCP).
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport streamable-http · sse counts 3 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
add
-
consent_demo
-
multiply
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 1589aec · analyzer v33 · 1d ago
danger signals2
- suspicious endpoint 1.2.3.4 AuthPlane-python-sdk-1589aec/tests/net/test_ssrf.py :283
assert call_args[0][1] == "https://1.2.3.4:443/.well-known/jwks.json" - suspicious endpoint 169.254.169.254 (cloud metadata) AuthPlane-python-sdk-1589aec/tests/test_dev_mode.py :347
issuer="http://169.254.169.254", # AWS metadata endpoint
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 103
filesystem 3
- fs (weak) AuthPlane-python-sdk-1589aec/conformance-tests/conftest.py :62
from pathlib import Path - fs (weak) AuthPlane-python-sdk-1589aec/conformance-tests/test_catalog_alignment.py :6
from pathlib import Path - fs (weak) AuthPlane-python-sdk-1589aec/tests/test_issuer_identity.py :10
from pathlib import Path
network 28
- net AuthPlane-python-sdk-1589aec/authplane-fastmcp/authplane_fastmcp/_prm.py :27
from urllib.parse import urlsplit - net AuthPlane-python-sdk-1589aec/authplane-fastmcp/authplane_fastmcp/verifier.py :12
from urllib.parse import urlsplit - net AuthPlane-python-sdk-1589aec/authplane-fastmcp/demo/mcpserver.py :10
from urllib.parse import urlparse - net (weak) AuthPlane-python-sdk-1589aec/authplane-fastmcp/tests/conftest.py :13
from httpx import ASGITransport, AsyncClient - net (weak) AuthPlane-python-sdk-1589aec/authplane-fastmcp/tests/test_integration.py :11
from urllib.parse import urlsplit - net AuthPlane-python-sdk-1589aec/authplane-mcp/authplane_mcp/_prm.py :27
from urllib.parse import urlsplit - net AuthPlane-python-sdk-1589aec/authplane-mcp/authplane_mcp/verifier.py :11
from urllib.parse import urlsplit - net AuthPlane-python-sdk-1589aec/authplane-mcp/demo/mcpserver.py :9
from urllib.parse import urlparse - net (weak) AuthPlane-python-sdk-1589aec/authplane-mcp/tests/test_integration.py :16
from httpx import ASGITransport, AsyncClient - net AuthPlane-python-sdk-1589aec/authplane/client.py :7
import httpx - net AuthPlane-python-sdk-1589aec/authplane/dpop.py :14
from urllib.parse import SplitResult, urlsplit, urlunsplit - net AuthPlane-python-sdk-1589aec/authplane/internal/cache_headers.py :21
headers: HTTP response headers (case-insensitive mapping, e.g. httpx.Headers).
show 16 more
- net AuthPlane-python-sdk-1589aec/authplane/internal/document_fetcher.py :5
import httpx - net AuthPlane-python-sdk-1589aec/authplane/internal/metadata.py :5
from urllib.parse import urlsplit - net AuthPlane-python-sdk-1589aec/authplane/internal/urls.py :3
from urllib.parse import urlsplit, urlunsplit - net AuthPlane-python-sdk-1589aec/authplane/net/http.py :7
from urllib.parse import quote, urlencode - net AuthPlane-python-sdk-1589aec/authplane/net/ip_validation.py :9
import socket - net AuthPlane-python-sdk-1589aec/authplane/net/ssrf.py :12
from urllib.parse import urlencode, urlsplit - net (weak) AuthPlane-python-sdk-1589aec/conformance-tests/test_jwt_and_dpop_conformance.py :10
import httpx - net (weak) AuthPlane-python-sdk-1589aec/conformance-tests/test_oauth_protocol_conformance.py :6
from urllib.parse import parse_qs - net (weak) AuthPlane-python-sdk-1589aec/tests/internal/test_jwks_fetcher.py :7
import httpx - net (weak) AuthPlane-python-sdk-1589aec/tests/net/test_ssrf.py :6
import httpx - net (weak) AuthPlane-python-sdk-1589aec/tests/net/test_ssrf_edge_cases.py :16
import httpx - net (weak) AuthPlane-python-sdk-1589aec/tests/oauth/test_introspection.py :5
from urllib.parse import quote - net (weak) AuthPlane-python-sdk-1589aec/tests/oauth/test_token_exchange.py :6
import httpx - net (weak) AuthPlane-python-sdk-1589aec/tests/test_protocol_and_http_edges.py :6
import httpx - net (weak) AuthPlane-python-sdk-1589aec/tests/verifier/test_revocation.py :370
import httpx - net (weak) AuthPlane-python-sdk-1589aec/tests/verifier/test_verifier.py :7
import httpx
secrets 2
- secrets AuthPlane-python-sdk-1589aec/authplane-fastmcp/demo/mcpserver.py :30
client_secret = os.environ["CLIENT_SECRET"] - secrets AuthPlane-python-sdk-1589aec/authplane-mcp/demo/mcpserver.py :57
client_secret=os.environ["CLIENT_SECRET"],
tool registrations 5
- add AuthPlane-python-sdk-1589aec/authplane-fastmcp/demo/mcpserver.py :46
- multiply AuthPlane-python-sdk-1589aec/authplane-fastmcp/demo/mcpserver.py :51
- add AuthPlane-python-sdk-1589aec/authplane-mcp/demo/mcpserver.py :71
- multiply AuthPlane-python-sdk-1589aec/authplane-mcp/demo/mcpserver.py :77
- consent_demo AuthPlane-python-sdk-1589aec/authplane-mcp/demo/mcpserver.py :83
declared dependencies 9
- authlib@>=1.3
- httpx@>=0.27
- pytest@>=8.0
- pytest-asyncio@>=0.23
- respx@>=0.21
- cryptography@>=42
- coverage@>=7
- pyright@>=1.1
- ruff@>=0.16,<0.17