universal-mcp-applications 0.1.22__py3-none-any.whl → 0.1.33__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of universal-mcp-applications might be problematic. Click here for more details.
- universal_mcp/applications/browser_use/app.py +14 -19
- universal_mcp/applications/google_docs/app.py +363 -289
- universal_mcp/applications/google_gemini/app.py +3 -3
- universal_mcp/applications/google_sheet/app.py +6 -2
- universal_mcp/applications/linkedin/README.md +18 -4
- universal_mcp/applications/linkedin/app.py +754 -153
- universal_mcp/applications/onedrive/README.md +24 -0
- universal_mcp/applications/onedrive/__init__.py +1 -0
- universal_mcp/applications/onedrive/app.py +338 -0
- universal_mcp/applications/outlook/app.py +281 -199
- universal_mcp/applications/reddit/app.py +30 -47
- universal_mcp/applications/scraper/README.md +7 -4
- universal_mcp/applications/scraper/app.py +310 -290
- universal_mcp/applications/sharepoint/README.md +16 -14
- universal_mcp/applications/sharepoint/app.py +267 -154
- universal_mcp/applications/slack/app.py +31 -0
- universal_mcp/applications/zenquotes/app.py +2 -2
- {universal_mcp_applications-0.1.22.dist-info → universal_mcp_applications-0.1.33.dist-info}/METADATA +2 -2
- {universal_mcp_applications-0.1.22.dist-info → universal_mcp_applications-0.1.33.dist-info}/RECORD +21 -21
- universal_mcp/applications/unipile/README.md +0 -28
- universal_mcp/applications/unipile/__init__.py +0 -1
- universal_mcp/applications/unipile/app.py +0 -1077
- {universal_mcp_applications-0.1.22.dist-info → universal_mcp_applications-0.1.33.dist-info}/WHEEL +0 -0
- {universal_mcp_applications-0.1.22.dist-info → universal_mcp_applications-0.1.33.dist-info}/licenses/LICENSE +0 -0
|
@@ -3,18 +3,20 @@ from typing import Annotated
|
|
|
3
3
|
from universal_mcp.applications.application import APIApplication
|
|
4
4
|
from universal_mcp.integrations import Integration
|
|
5
5
|
|
|
6
|
-
from
|
|
6
|
+
from browser_use_sdk import BrowserUse
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
class BrowserUseApp(APIApplication):
|
|
10
|
-
def __init__(self, integration: Integration = None, **kwargs) -> None:
|
|
10
|
+
def __init__(self, integration: Integration | None = None, **kwargs) -> None:
|
|
11
11
|
super().__init__(name="browser_use", integration=integration, **kwargs)
|
|
12
|
-
self.
|
|
12
|
+
self._browser_client = None
|
|
13
13
|
|
|
14
14
|
@property
|
|
15
|
-
def
|
|
16
|
-
if self.
|
|
17
|
-
return self.
|
|
15
|
+
def browser_client(self) -> BrowserUse:
|
|
16
|
+
if self._browser_client is not None:
|
|
17
|
+
return self._browser_client
|
|
18
|
+
if not self.integration:
|
|
19
|
+
raise ValueError("Integration is required but not provided")
|
|
18
20
|
credentials = self.integration.get_credentials()
|
|
19
21
|
api_key = (
|
|
20
22
|
credentials.get("api_key")
|
|
@@ -23,8 +25,8 @@ class BrowserUseApp(APIApplication):
|
|
|
23
25
|
)
|
|
24
26
|
if not api_key:
|
|
25
27
|
raise ValueError("API key not found in integration credentials")
|
|
26
|
-
self.
|
|
27
|
-
return self.
|
|
28
|
+
self._browser_client = BrowserUse(api_key=api_key)
|
|
29
|
+
return self._browser_client
|
|
28
30
|
|
|
29
31
|
async def browser_task(
|
|
30
32
|
self,
|
|
@@ -43,34 +45,27 @@ class BrowserUseApp(APIApplication):
|
|
|
43
45
|
Returns:
|
|
44
46
|
dict: The result of the completed task, including output and other metadata.
|
|
45
47
|
"""
|
|
46
|
-
created_task = self.
|
|
48
|
+
created_task = self.browser_client.tasks.create_task(
|
|
47
49
|
llm=llm, task=task, max_steps=max_steps
|
|
48
50
|
)
|
|
49
51
|
result = created_task.complete()
|
|
50
|
-
return result.
|
|
52
|
+
return result.model_dump()
|
|
51
53
|
|
|
52
54
|
async def get_browser_task_status(
|
|
53
55
|
self,
|
|
54
56
|
task_id: Annotated[str, "Task ID to check"],
|
|
55
|
-
enable_polling: Annotated[bool, "Auto-poll for 28s (default: true)"] = True,
|
|
56
57
|
) -> dict:
|
|
57
58
|
"""
|
|
58
59
|
Checks task progress with smart polling.
|
|
59
60
|
|
|
60
61
|
Args:
|
|
61
62
|
task_id (str): The ID of the task to check.
|
|
62
|
-
enable_polling (bool, optional): If true, polls for the task status for up to 28 seconds. Defaults to True.
|
|
63
63
|
|
|
64
64
|
Returns:
|
|
65
65
|
dict: The current status and details of the task.
|
|
66
66
|
"""
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
result = task.poll()
|
|
70
|
-
return result.to_dict()
|
|
71
|
-
else:
|
|
72
|
-
task = self.client.tasks.get(task_id)
|
|
73
|
-
return task.to_dict()
|
|
67
|
+
task = self.browser_client.tasks.get_task(task_id)
|
|
68
|
+
return task.model_dump()
|
|
74
69
|
|
|
75
70
|
def list_tools(self):
|
|
76
71
|
return [self.browser_task, self.get_browser_task_status]
|