feat(mcp): make api_key optional, add http host/port config

This commit is contained in:
CREDO23 2026-07-07 16:52:30 +02:00
parent 8a54e0293e
commit 3b4678ade4
2 changed files with 19 additions and 8 deletions

View file

@ -12,6 +12,8 @@ from dataclasses import dataclass
DEFAULT_BASE_URL = "http://localhost:8000" DEFAULT_BASE_URL = "http://localhost:8000"
DEFAULT_API_PREFIX = "/api/v1" DEFAULT_API_PREFIX = "/api/v1"
DEFAULT_TIMEOUT_SECONDS = 180.0 DEFAULT_TIMEOUT_SECONDS = 180.0
DEFAULT_HTTP_HOST = "127.0.0.1"
DEFAULT_HTTP_PORT = 8080
@dataclass(frozen=True) @dataclass(frozen=True)
@ -19,10 +21,12 @@ class Settings:
"""Resolved configuration for a server process.""" """Resolved configuration for a server process."""
base_url: str base_url: str
api_key: str api_key: str | None
api_prefix: str api_prefix: str
timeout: float timeout: float
default_workspace: str | None default_workspace: str | None
host: str
port: int
@property @property
def api_base(self) -> str: def api_base(self) -> str:
@ -30,13 +34,9 @@ class Settings:
@classmethod @classmethod
def from_env(cls) -> Settings: def from_env(cls) -> Settings:
api_key = os.environ.get("SURFSENSE_API_KEY", "").strip() # Optional here: remote (http) callers pass their own key per request in
if not api_key: # a header. ``__main__`` enforces it for stdio, its only source of a key.
raise SystemExit( api_key = os.environ.get("SURFSENSE_API_KEY", "").strip() or None
"SURFSENSE_API_KEY is required. Create an API key in SurfSense "
"(Settings -> API) and pass it via the SURFSENSE_API_KEY "
"environment variable."
)
base_url = ( base_url = (
os.environ.get("SURFSENSE_BASE_URL", DEFAULT_BASE_URL).strip().rstrip("/") os.environ.get("SURFSENSE_BASE_URL", DEFAULT_BASE_URL).strip().rstrip("/")
@ -53,10 +53,19 @@ class Settings:
default_workspace = os.environ.get("SURFSENSE_WORKSPACE", "").strip() or None default_workspace = os.environ.get("SURFSENSE_WORKSPACE", "").strip() or None
host = os.environ.get("SURFSENSE_MCP_HOST", "").strip() or DEFAULT_HTTP_HOST
raw_port = os.environ.get("SURFSENSE_MCP_PORT", "").strip()
try:
port = int(raw_port) if raw_port else DEFAULT_HTTP_PORT
except ValueError:
port = DEFAULT_HTTP_PORT
return cls( return cls(
base_url=base_url, base_url=base_url,
api_key=api_key, api_key=api_key,
api_prefix=api_prefix, api_prefix=api_prefix,
timeout=timeout, timeout=timeout,
default_workspace=default_workspace, default_workspace=default_workspace,
host=host,
port=port,
) )

View file

@ -47,6 +47,8 @@ async def _collect_tools() -> dict[str, object]:
api_prefix="/api/v1", api_prefix="/api/v1",
timeout=5.0, timeout=5.0,
default_workspace=None, default_workspace=None,
host="127.0.0.1",
port=8080,
) )
mcp, _client = build_server(settings) mcp, _client = build_server(settings)
tools = await mcp.list_tools() tools = await mcp.list_tools()