diff --git a/skyvern/agent/agent.py b/skyvern/agent/agent.py index 4fff3956..369186b1 100644 --- a/skyvern/agent/agent.py +++ b/skyvern/agent/agent.py @@ -66,7 +66,11 @@ class SkyvernAgent: settings.BROWSER_TYPE = browser_type elif base_url and api_key: - self.client = SkyvernClient(base_url=base_url, api_key=api_key) + self.client = SkyvernClient( + base_url=base_url, + api_key=api_key, + extra_headers={"X-User-Agent": "skyvern-mcp"}, + ) else: raise ValueError("base_url and api_key must be both provided") diff --git a/skyvern/agent/client.py b/skyvern/agent/client.py index ef8f9745..c55cbcee 100644 --- a/skyvern/agent/client.py +++ b/skyvern/agent/client.py @@ -8,10 +8,12 @@ class SkyvernClient: self, base_url: str = settings.SKYVERN_BASE_URL, api_key: str = settings.SKYVERN_API_KEY, + extra_headers: dict[str, str] | None = None, ) -> None: self.base_url = base_url self.api_key = api_key self.client = AsyncSkyvern(base_url=base_url, api_key=api_key) + self.extra_headers = extra_headers async def run_task( self, diff --git a/skyvern/forge/sdk/routes/agent_protocol.py b/skyvern/forge/sdk/routes/agent_protocol.py index 275f4560..14149dd0 100644 --- a/skyvern/forge/sdk/routes/agent_protocol.py +++ b/skyvern/forge/sdk/routes/agent_protocol.py @@ -179,6 +179,7 @@ async def run_task_v1( current_org: Organization = Depends(org_auth_service.get_current_org), x_api_key: Annotated[str | None, Header()] = None, x_max_steps_override: Annotated[int | None, Header()] = None, + x_user_agent: Annotated[str | None, Header()] = None, ) -> CreateTaskResponse: analytics.capture("skyvern-oss-agent-task-create", data={"url": task.url}) await PermissionCheckerFactory.get_instance().check(current_org, browser_session_id=task.browser_session_id) @@ -652,6 +653,7 @@ async def run_workflow_legacy( template: bool = Query(False), x_api_key: Annotated[str | None, Header()] = None, x_max_steps_override: Annotated[int | None, Header()] = None, + x_user_agent: Annotated[str | None, Header()] = None, ) -> RunWorkflowResponse: analytics.capture("skyvern-oss-agent-workflow-execute") context = skyvern_context.ensure_context() @@ -1458,6 +1460,7 @@ async def run_task( run_request: TaskRunRequest, current_org: Organization = Depends(org_auth_service.get_current_org), x_api_key: Annotated[str | None, Header()] = None, + x_user_agent: Annotated[str | None, Header()] = None, ) -> TaskRunResponse: analytics.capture("skyvern-oss-run-task", data={"url": run_request.url}) await PermissionCheckerFactory.get_instance().check(current_org, browser_session_id=run_request.browser_session_id) @@ -1600,6 +1603,7 @@ async def run_workflow( template: bool = Query(False), x_api_key: Annotated[str | None, Header()] = None, x_max_steps_override: Annotated[int | None, Header()] = None, + x_user_agent: Annotated[str | None, Header()] = None, ) -> WorkflowRunResponse: analytics.capture("skyvern-oss-run-workflow") await PermissionCheckerFactory.get_instance().check(