MCP gateway proxy for varied backends
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · streamable-http · http counts 6 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
gateway_auth_status
-
gateway_call_tool
-
gateway_connect_backend
-
gateway_list_backends
-
gateway_list_tools
-
proxy_call
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit b0bfb8a · analyzer v32 · 1h ago
danger signals2
- dynamic code execution eval()/exec() rShetty-relay-b0bfb8a/gateway/server.py :3141
exec(fn_code, local_ns, local_ns) - over-broad OAuth scope delete_repo rShetty-relay-b0bfb8a/tests/test_patroclus.py :111
resource="github/delete_repo",
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 30
filesystem 4
- fs rShetty-relay-b0bfb8a/auth/database.py :20
from pathlib import Path - fs rShetty-relay-b0bfb8a/auth/encryption.py :31
with open(key_file, "rb") as f: - fs rShetty-relay-b0bfb8a/gateway/cli.py :102
with open(args.output, "w") as f: - fs rShetty-relay-b0bfb8a/security/middleware.py :404
with open(self.log_path, "a") as f:
shell / exec 1
- shell rShetty-relay-b0bfb8a/backends/manager.py :17
import subprocess
network 10
- net rShetty-relay-b0bfb8a/auth/oauth_providers.py :11
import urllib.parse - net rShetty-relay-b0bfb8a/backends/manager.py :226
import httpx - net rShetty-relay-b0bfb8a/connectors/ai_providers.py :17
import httpx - net rShetty-relay-b0bfb8a/connectors/github.py :29
import httpx - net rShetty-relay-b0bfb8a/connectors/linear.py :19
import httpx - net rShetty-relay-b0bfb8a/connectors/slack.py :8
import httpx - net rShetty-relay-b0bfb8a/gateway/cli.py :29
import requests - net rShetty-relay-b0bfb8a/patroclus/client.py :25
import httpx - net (weak) rShetty-relay-b0bfb8a/tests/test_gateway.py :23
import httpx - net (weak) rShetty-relay-b0bfb8a/tests/test_patroclus.py :157
import httpx
secrets 3
- secrets rShetty-relay-b0bfb8a/auth/encryption.py :16
key_env = os.getenv("RELAY_ENCRYPTION_KEY") - secrets rShetty-relay-b0bfb8a/gateway/cli.py :172
api_key = args.api_key or os.getenv("GATEWAY_API_KEY") - secrets rShetty-relay-b0bfb8a/gateway/server.py :280
if not os.getenv("RELAY_ALLOW_DEFAULT_SECRET"):
database 3
- db rShetty-relay-b0bfb8a/auth/database.py :16
import sqlite3 - db rShetty-relay-b0bfb8a/auth/oauth.py :177
import redis as redis_lib # type: ignore[import] - db rShetty-relay-b0bfb8a/auth/token_store.py :152
import redis.asyncio as aioredis # type: ignore[import]
tool registrations 6
- gateway_list_backends rShetty-relay-b0bfb8a/gateway/server.py :2878
- gateway_list_tools rShetty-relay-b0bfb8a/gateway/server.py :2886
- gateway_connect_backend rShetty-relay-b0bfb8a/gateway/server.py :2896
- gateway_auth_status rShetty-relay-b0bfb8a/gateway/server.py :2907
- gateway_call_tool rShetty-relay-b0bfb8a/gateway/server.py :2927
- proxy_call rShetty-relay-b0bfb8a/gateway/server.py :3363
declared dependencies 21
- mcp@>=1.0.0
- fastapi@>=0.109.0
- uvicorn@>=0.27.0
- httpx@>=0.26.0
- pydantic@>=2.5.0
- pydantic-settings@>=2.1.0
- python-jose@>=3.3.0
- passlib@>=1.7.4
- python-multipart@>=0.0.6
- aiofiles@>=23.2.1
- redis@>=5.0.0
- sqlalchemy@>=2.0.0
- aiosqlite@>=0.19.0
- jinja2@>=3.1.0
- cryptography@>=41.0.0
- pytest@>=7.4.0
- pytest-asyncio@>=0.21.0
- pytest-cov@>=4.1.0
- black@>=23.0.0
- ruff@>=0.1.0
- mypy@>=1.8.0