universal-mcp-applications 0.1.33__py3-none-any.whl → 0.1.39rc16__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/BEST_PRACTICES.md +1 -1
- universal_mcp/applications/ahrefs/app.py +92 -238
- universal_mcp/applications/airtable/app.py +36 -135
- universal_mcp/applications/apollo/app.py +124 -477
- universal_mcp/applications/asana/app.py +605 -1755
- universal_mcp/applications/aws_s3/app.py +63 -119
- universal_mcp/applications/bill/app.py +644 -2055
- universal_mcp/applications/box/app.py +1246 -4159
- universal_mcp/applications/braze/app.py +410 -1476
- universal_mcp/applications/browser_use/README.md +15 -1
- universal_mcp/applications/browser_use/__init__.py +1 -0
- universal_mcp/applications/browser_use/app.py +91 -26
- universal_mcp/applications/cal_com_v2/app.py +207 -625
- universal_mcp/applications/calendly/app.py +103 -242
- universal_mcp/applications/canva/app.py +75 -140
- universal_mcp/applications/clickup/app.py +331 -798
- universal_mcp/applications/coda/app.py +240 -520
- universal_mcp/applications/confluence/app.py +497 -1285
- universal_mcp/applications/contentful/app.py +40 -155
- universal_mcp/applications/crustdata/app.py +44 -123
- universal_mcp/applications/dialpad/app.py +451 -924
- universal_mcp/applications/digitalocean/app.py +2071 -6082
- universal_mcp/applications/domain_checker/app.py +3 -54
- universal_mcp/applications/e2b/app.py +17 -68
- universal_mcp/applications/elevenlabs/README.md +27 -3
- universal_mcp/applications/elevenlabs/app.py +741 -74
- universal_mcp/applications/exa/README.md +8 -4
- universal_mcp/applications/exa/app.py +415 -186
- universal_mcp/applications/falai/README.md +5 -7
- universal_mcp/applications/falai/app.py +156 -232
- universal_mcp/applications/figma/app.py +91 -175
- universal_mcp/applications/file_system/app.py +2 -13
- universal_mcp/applications/firecrawl/app.py +198 -176
- universal_mcp/applications/fireflies/app.py +59 -281
- universal_mcp/applications/fpl/app.py +92 -529
- universal_mcp/applications/fpl/utils/fixtures.py +15 -49
- universal_mcp/applications/fpl/utils/helper.py +25 -89
- universal_mcp/applications/fpl/utils/league_utils.py +20 -64
- universal_mcp/applications/ghost_content/app.py +70 -179
- universal_mcp/applications/github/app.py +30 -67
- universal_mcp/applications/gong/app.py +142 -302
- universal_mcp/applications/google_calendar/app.py +26 -78
- universal_mcp/applications/google_docs/README.md +15 -14
- universal_mcp/applications/google_docs/app.py +103 -206
- universal_mcp/applications/google_drive/app.py +194 -793
- universal_mcp/applications/google_gemini/app.py +68 -59
- universal_mcp/applications/google_mail/README.md +1 -0
- universal_mcp/applications/google_mail/app.py +93 -214
- universal_mcp/applications/google_searchconsole/app.py +25 -58
- universal_mcp/applications/google_sheet/README.md +2 -1
- universal_mcp/applications/google_sheet/app.py +226 -624
- universal_mcp/applications/google_sheet/helper.py +26 -53
- universal_mcp/applications/hashnode/app.py +57 -269
- universal_mcp/applications/heygen/README.md +10 -32
- universal_mcp/applications/heygen/app.py +339 -811
- universal_mcp/applications/http_tools/app.py +10 -32
- universal_mcp/applications/hubspot/README.md +1 -1
- universal_mcp/applications/hubspot/app.py +7508 -99
- universal_mcp/applications/jira/app.py +2419 -8334
- universal_mcp/applications/klaviyo/app.py +739 -1621
- universal_mcp/applications/linkedin/README.md +18 -1
- universal_mcp/applications/linkedin/app.py +729 -251
- universal_mcp/applications/mailchimp/app.py +696 -1851
- universal_mcp/applications/markitdown/app.py +8 -20
- universal_mcp/applications/miro/app.py +333 -815
- universal_mcp/applications/ms_teams/app.py +420 -1407
- universal_mcp/applications/neon/app.py +144 -250
- universal_mcp/applications/notion/app.py +38 -53
- universal_mcp/applications/onedrive/app.py +26 -48
- universal_mcp/applications/openai/app.py +43 -166
- universal_mcp/applications/outlook/README.md +22 -9
- universal_mcp/applications/outlook/app.py +403 -141
- universal_mcp/applications/perplexity/README.md +2 -1
- universal_mcp/applications/perplexity/app.py +161 -20
- universal_mcp/applications/pipedrive/app.py +1021 -3331
- universal_mcp/applications/posthog/app.py +272 -541
- universal_mcp/applications/reddit/app.py +65 -164
- universal_mcp/applications/resend/app.py +72 -139
- universal_mcp/applications/retell/app.py +23 -50
- universal_mcp/applications/rocketlane/app.py +252 -965
- universal_mcp/applications/scraper/app.py +114 -142
- universal_mcp/applications/semanticscholar/app.py +36 -78
- universal_mcp/applications/semrush/app.py +44 -78
- universal_mcp/applications/sendgrid/app.py +826 -1576
- universal_mcp/applications/sentry/app.py +444 -1079
- universal_mcp/applications/serpapi/app.py +44 -146
- universal_mcp/applications/sharepoint/app.py +27 -49
- universal_mcp/applications/shopify/app.py +1748 -4486
- universal_mcp/applications/shortcut/app.py +275 -536
- universal_mcp/applications/slack/app.py +43 -125
- universal_mcp/applications/spotify/app.py +206 -405
- universal_mcp/applications/supabase/app.py +174 -283
- universal_mcp/applications/tavily/app.py +2 -2
- universal_mcp/applications/trello/app.py +853 -2816
- universal_mcp/applications/twilio/app.py +27 -62
- universal_mcp/applications/twitter/api_segments/compliance_api.py +4 -14
- universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +6 -18
- universal_mcp/applications/twitter/api_segments/likes_api.py +1 -3
- universal_mcp/applications/twitter/api_segments/lists_api.py +5 -15
- universal_mcp/applications/twitter/api_segments/trends_api.py +1 -3
- universal_mcp/applications/twitter/api_segments/tweets_api.py +9 -31
- universal_mcp/applications/twitter/api_segments/usage_api.py +1 -5
- universal_mcp/applications/twitter/api_segments/users_api.py +14 -42
- universal_mcp/applications/whatsapp/app.py +35 -186
- universal_mcp/applications/whatsapp/audio.py +2 -6
- universal_mcp/applications/whatsapp/whatsapp.py +17 -51
- universal_mcp/applications/whatsapp_business/app.py +86 -299
- universal_mcp/applications/wrike/app.py +80 -153
- universal_mcp/applications/yahoo_finance/app.py +19 -65
- universal_mcp/applications/youtube/app.py +120 -306
- universal_mcp/applications/zenquotes/app.py +3 -3
- {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc16.dist-info}/METADATA +4 -2
- {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc16.dist-info}/RECORD +115 -119
- {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc16.dist-info}/WHEEL +1 -1
- universal_mcp/applications/hubspot/api_segments/__init__.py +0 -0
- universal_mcp/applications/hubspot/api_segments/api_segment_base.py +0 -54
- universal_mcp/applications/hubspot/api_segments/crm_api.py +0 -7337
- universal_mcp/applications/hubspot/api_segments/marketing_api.py +0 -1467
- {universal_mcp_applications-0.1.33.dist-info → universal_mcp_applications-0.1.39rc16.dist-info}/licenses/LICENSE +0 -0
|
@@ -1 +1,15 @@
|
|
|
1
|
-
#
|
|
1
|
+
# BrowserUseApp MCP Server
|
|
2
|
+
|
|
3
|
+
An MCP Server for the BrowserUseApp API.
|
|
4
|
+
|
|
5
|
+
## 🛠️ Tool List
|
|
6
|
+
|
|
7
|
+
This is automatically generated from OpenAPI schema for the BrowserUseApp API.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
| Tool | Description |
|
|
11
|
+
|------|-------------|
|
|
12
|
+
| `browser_task` | Creates and starts a browser automation task in the background. Unlike synchronous tools, this returns immediately with a Task ID so the agent does not block while the browser works. You must use `get_browser_task_status` to check progress and retrieve the final result. |
|
|
13
|
+
| `get_browser_task_status` | Checks the status of a browser automation task. Use this to poll for completion and retrieve the final output of a background task. |
|
|
14
|
+
| `list_tasks` | Lists recent browser automation tasks. Useful for finding lost task IDs or auditing recent activity. |
|
|
15
|
+
| `stop_task` | Stops a running browser automation task. Use this to cancel a stuck or long-running task. |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .app import BrowserUseApp
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
from typing import Annotated
|
|
1
|
+
from typing import Annotated, Literal
|
|
2
2
|
|
|
3
3
|
from universal_mcp.applications.application import APIApplication
|
|
4
4
|
from universal_mcp.integrations import Integration
|
|
5
5
|
|
|
6
|
-
from browser_use_sdk import
|
|
6
|
+
from browser_use_sdk import AsyncBrowserUse
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
class BrowserUseApp(APIApplication):
|
|
@@ -11,61 +11,126 @@ class BrowserUseApp(APIApplication):
|
|
|
11
11
|
super().__init__(name="browser_use", integration=integration, **kwargs)
|
|
12
12
|
self._browser_client = None
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
def browser_client(self) -> BrowserUse:
|
|
14
|
+
async def get_client(self) -> AsyncBrowserUse:
|
|
16
15
|
if self._browser_client is not None:
|
|
17
16
|
return self._browser_client
|
|
18
17
|
if not self.integration:
|
|
19
18
|
raise ValueError("Integration is required but not provided")
|
|
20
|
-
credentials = self.integration.
|
|
21
|
-
api_key = (
|
|
22
|
-
credentials.get("api_key")
|
|
23
|
-
or credentials.get("API_KEY")
|
|
24
|
-
or credentials.get("apiKey")
|
|
25
|
-
)
|
|
19
|
+
credentials = await self.integration.get_credentials_async()
|
|
20
|
+
api_key = credentials.get("api_key") or credentials.get("API_KEY") or credentials.get("apiKey")
|
|
26
21
|
if not api_key:
|
|
27
22
|
raise ValueError("API key not found in integration credentials")
|
|
28
|
-
self._browser_client =
|
|
23
|
+
self._browser_client = AsyncBrowserUse(api_key=api_key)
|
|
29
24
|
return self._browser_client
|
|
30
25
|
|
|
31
26
|
async def browser_task(
|
|
32
27
|
self,
|
|
33
|
-
task: Annotated[str, "
|
|
34
|
-
max_steps: Annotated[int, "Max actions to take (
|
|
35
|
-
llm: Annotated[
|
|
28
|
+
task: Annotated[str, "The objective of the task"],
|
|
29
|
+
max_steps: Annotated[int, "Max actions to take (default: 8)"] = 8,
|
|
30
|
+
llm: Annotated[
|
|
31
|
+
Literal[
|
|
32
|
+
"gpt-4.1",
|
|
33
|
+
"gpt-4.1-mini",
|
|
34
|
+
"o4-mini",
|
|
35
|
+
"o3",
|
|
36
|
+
"gemini-2.5-flash",
|
|
37
|
+
"gemini-2.5-pro",
|
|
38
|
+
"claude-sonnet-4-20250514",
|
|
39
|
+
"gpt-4o",
|
|
40
|
+
"gpt-4o-mini",
|
|
41
|
+
"llama-4-maverick-17b-128e-instruct",
|
|
42
|
+
"claude-3-7-sonnet-20250219",
|
|
43
|
+
],
|
|
44
|
+
"The LLM to use",
|
|
45
|
+
] = "gpt-4o",
|
|
46
|
+
session_id: Annotated[str | None, "Session ID to continue an existing session"] = None,
|
|
36
47
|
) -> dict:
|
|
37
48
|
"""
|
|
38
|
-
Creates and
|
|
49
|
+
Creates and starts a browser automation task in the background. Unlike synchronous tools, this returns immediately with a Task ID so the agent does not block while the browser works. You must use `get_browser_task_status` to check progress and retrieve the final result.
|
|
39
50
|
|
|
40
51
|
Args:
|
|
41
52
|
task (str): The detailed description of the task for the browser to perform.
|
|
42
53
|
max_steps (int, optional): The maximum number of actions the browser can take. Defaults to 8.
|
|
43
|
-
llm (str, optional): The language model to use
|
|
54
|
+
llm (str, optional): The language model to use. Defaults to "gpt-4o".
|
|
55
|
+
session_id (str, optional): The ID of an existing session to use.
|
|
44
56
|
|
|
45
57
|
Returns:
|
|
46
|
-
dict: The
|
|
58
|
+
dict: The task creation details including the task ID.
|
|
59
|
+
|
|
60
|
+
Tags:
|
|
61
|
+
browser, automation, background, task, web, research, create, important
|
|
47
62
|
"""
|
|
48
|
-
|
|
49
|
-
|
|
63
|
+
client = await self.get_client()
|
|
64
|
+
created_task = await client.tasks.create_task(
|
|
65
|
+
llm=llm, task=task, max_steps=max_steps, session_id=session_id
|
|
50
66
|
)
|
|
51
|
-
|
|
52
|
-
return
|
|
67
|
+
|
|
68
|
+
return created_task.model_dump()
|
|
53
69
|
|
|
54
70
|
async def get_browser_task_status(
|
|
55
71
|
self,
|
|
56
72
|
task_id: Annotated[str, "Task ID to check"],
|
|
57
73
|
) -> dict:
|
|
58
74
|
"""
|
|
59
|
-
Checks task
|
|
60
|
-
|
|
75
|
+
Checks the status of a browser automation task. Use this to poll for completion and retrieve the final output of a background task.
|
|
76
|
+
|
|
61
77
|
Args:
|
|
62
78
|
task_id (str): The ID of the task to check.
|
|
63
79
|
|
|
64
80
|
Returns:
|
|
65
|
-
dict: The current status and
|
|
81
|
+
dict: The current task details including status ('created', 'running', 'completed', 'stopped', 'failed') and output (if completed).
|
|
82
|
+
|
|
83
|
+
Tags:
|
|
84
|
+
status, poll, browser, task, monitoring, output, important
|
|
66
85
|
"""
|
|
67
|
-
|
|
86
|
+
client = await self.get_client()
|
|
87
|
+
task = await client.tasks.get_task(task_id)
|
|
68
88
|
return task.model_dump()
|
|
69
89
|
|
|
90
|
+
async def list_tasks(
|
|
91
|
+
self,
|
|
92
|
+
page_size: Annotated[int, "Number of tasks to return (default: 10)"] = 10,
|
|
93
|
+
) -> dict:
|
|
94
|
+
"""
|
|
95
|
+
Lists recent browser automation tasks. Useful for finding lost task IDs or auditing recent activity.
|
|
96
|
+
|
|
97
|
+
Args:
|
|
98
|
+
page_size (int, optional): The number of tasks to retrieve. Defaults to 10.
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
dict: A list of tasks with their basic details.
|
|
102
|
+
|
|
103
|
+
Tags:
|
|
104
|
+
list, history, browser, tasks, audit
|
|
105
|
+
"""
|
|
106
|
+
client = await self.get_client()
|
|
107
|
+
tasks = await client.tasks.list_tasks(page_size=page_size)
|
|
108
|
+
return tasks.model_dump()
|
|
109
|
+
|
|
110
|
+
async def stop_task(
|
|
111
|
+
self,
|
|
112
|
+
task_id: Annotated[str, "Task ID to stop"],
|
|
113
|
+
) -> dict:
|
|
114
|
+
"""
|
|
115
|
+
Stops a running browser automation task. Use this to cancel a stuck or long-running task.
|
|
116
|
+
|
|
117
|
+
Args:
|
|
118
|
+
task_id (str): The ID of the task to stop.
|
|
119
|
+
|
|
120
|
+
Returns:
|
|
121
|
+
dict: The updated task details showing the stopped status.
|
|
122
|
+
|
|
123
|
+
Tags:
|
|
124
|
+
stop, cancel, browser, task, control
|
|
125
|
+
"""
|
|
126
|
+
client = await self.get_client()
|
|
127
|
+
updated_task = await client.tasks.update_task(task_id, action="stop")
|
|
128
|
+
return updated_task.model_dump()
|
|
129
|
+
|
|
70
130
|
def list_tools(self):
|
|
71
|
-
return [
|
|
131
|
+
return [
|
|
132
|
+
self.browser_task,
|
|
133
|
+
self.get_browser_task_status,
|
|
134
|
+
self.list_tasks,
|
|
135
|
+
self.stop_task,
|
|
136
|
+
]
|