universal-mcp-applications 0.1.22__py3-none-any.whl → 0.1.39rc8__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.

Files changed (120) hide show
  1. universal_mcp/applications/ahrefs/app.py +92 -238
  2. universal_mcp/applications/airtable/app.py +23 -122
  3. universal_mcp/applications/apollo/app.py +122 -475
  4. universal_mcp/applications/asana/app.py +605 -1755
  5. universal_mcp/applications/aws_s3/app.py +36 -103
  6. universal_mcp/applications/bill/app.py +644 -2055
  7. universal_mcp/applications/box/app.py +1246 -4159
  8. universal_mcp/applications/braze/app.py +410 -1476
  9. universal_mcp/applications/browser_use/README.md +15 -1
  10. universal_mcp/applications/browser_use/__init__.py +1 -0
  11. universal_mcp/applications/browser_use/app.py +94 -37
  12. universal_mcp/applications/cal_com_v2/app.py +207 -625
  13. universal_mcp/applications/calendly/app.py +103 -242
  14. universal_mcp/applications/canva/app.py +75 -140
  15. universal_mcp/applications/clickup/app.py +331 -798
  16. universal_mcp/applications/coda/app.py +240 -520
  17. universal_mcp/applications/confluence/app.py +497 -1285
  18. universal_mcp/applications/contentful/app.py +36 -151
  19. universal_mcp/applications/crustdata/app.py +42 -121
  20. universal_mcp/applications/dialpad/app.py +451 -924
  21. universal_mcp/applications/digitalocean/app.py +2071 -6082
  22. universal_mcp/applications/domain_checker/app.py +3 -54
  23. universal_mcp/applications/e2b/app.py +14 -64
  24. universal_mcp/applications/elevenlabs/app.py +9 -47
  25. universal_mcp/applications/exa/README.md +8 -4
  26. universal_mcp/applications/exa/app.py +408 -186
  27. universal_mcp/applications/falai/app.py +24 -101
  28. universal_mcp/applications/figma/app.py +91 -175
  29. universal_mcp/applications/file_system/app.py +2 -13
  30. universal_mcp/applications/firecrawl/app.py +186 -163
  31. universal_mcp/applications/fireflies/app.py +59 -281
  32. universal_mcp/applications/fpl/app.py +92 -529
  33. universal_mcp/applications/fpl/utils/fixtures.py +15 -49
  34. universal_mcp/applications/fpl/utils/helper.py +25 -89
  35. universal_mcp/applications/fpl/utils/league_utils.py +20 -64
  36. universal_mcp/applications/ghost_content/app.py +66 -175
  37. universal_mcp/applications/github/app.py +28 -65
  38. universal_mcp/applications/gong/app.py +140 -300
  39. universal_mcp/applications/google_calendar/app.py +26 -78
  40. universal_mcp/applications/google_docs/app.py +324 -354
  41. universal_mcp/applications/google_drive/app.py +194 -793
  42. universal_mcp/applications/google_gemini/app.py +29 -64
  43. universal_mcp/applications/google_mail/README.md +1 -0
  44. universal_mcp/applications/google_mail/app.py +93 -214
  45. universal_mcp/applications/google_searchconsole/app.py +25 -58
  46. universal_mcp/applications/google_sheet/app.py +174 -623
  47. universal_mcp/applications/google_sheet/helper.py +26 -53
  48. universal_mcp/applications/hashnode/app.py +57 -269
  49. universal_mcp/applications/heygen/app.py +77 -155
  50. universal_mcp/applications/http_tools/app.py +10 -32
  51. universal_mcp/applications/hubspot/README.md +1 -1
  52. universal_mcp/applications/hubspot/app.py +7508 -99
  53. universal_mcp/applications/jira/app.py +2419 -8334
  54. universal_mcp/applications/klaviyo/app.py +737 -1619
  55. universal_mcp/applications/linkedin/README.md +23 -4
  56. universal_mcp/applications/linkedin/app.py +861 -155
  57. universal_mcp/applications/mailchimp/app.py +696 -1851
  58. universal_mcp/applications/markitdown/app.py +8 -20
  59. universal_mcp/applications/miro/app.py +333 -815
  60. universal_mcp/applications/ms_teams/app.py +85 -207
  61. universal_mcp/applications/neon/app.py +144 -250
  62. universal_mcp/applications/notion/app.py +36 -51
  63. universal_mcp/applications/onedrive/README.md +24 -0
  64. universal_mcp/applications/onedrive/__init__.py +1 -0
  65. universal_mcp/applications/onedrive/app.py +316 -0
  66. universal_mcp/applications/openai/app.py +42 -165
  67. universal_mcp/applications/outlook/README.md +22 -9
  68. universal_mcp/applications/outlook/app.py +606 -262
  69. universal_mcp/applications/perplexity/README.md +2 -1
  70. universal_mcp/applications/perplexity/app.py +162 -20
  71. universal_mcp/applications/pipedrive/app.py +1021 -3331
  72. universal_mcp/applications/posthog/app.py +272 -541
  73. universal_mcp/applications/reddit/app.py +88 -204
  74. universal_mcp/applications/resend/app.py +41 -107
  75. universal_mcp/applications/retell/app.py +23 -50
  76. universal_mcp/applications/rocketlane/app.py +250 -963
  77. universal_mcp/applications/scraper/README.md +7 -4
  78. universal_mcp/applications/scraper/app.py +245 -283
  79. universal_mcp/applications/semanticscholar/app.py +36 -78
  80. universal_mcp/applications/semrush/app.py +43 -77
  81. universal_mcp/applications/sendgrid/app.py +826 -1576
  82. universal_mcp/applications/sentry/app.py +444 -1079
  83. universal_mcp/applications/serpapi/app.py +40 -143
  84. universal_mcp/applications/sharepoint/README.md +16 -14
  85. universal_mcp/applications/sharepoint/app.py +245 -154
  86. universal_mcp/applications/shopify/app.py +1743 -4479
  87. universal_mcp/applications/shortcut/app.py +272 -534
  88. universal_mcp/applications/slack/app.py +58 -109
  89. universal_mcp/applications/spotify/app.py +206 -405
  90. universal_mcp/applications/supabase/app.py +174 -283
  91. universal_mcp/applications/tavily/app.py +2 -2
  92. universal_mcp/applications/trello/app.py +853 -2816
  93. universal_mcp/applications/twilio/app.py +14 -50
  94. universal_mcp/applications/twitter/api_segments/compliance_api.py +4 -14
  95. universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +6 -18
  96. universal_mcp/applications/twitter/api_segments/likes_api.py +1 -3
  97. universal_mcp/applications/twitter/api_segments/lists_api.py +5 -15
  98. universal_mcp/applications/twitter/api_segments/trends_api.py +1 -3
  99. universal_mcp/applications/twitter/api_segments/tweets_api.py +9 -31
  100. universal_mcp/applications/twitter/api_segments/usage_api.py +1 -5
  101. universal_mcp/applications/twitter/api_segments/users_api.py +14 -42
  102. universal_mcp/applications/whatsapp/app.py +35 -186
  103. universal_mcp/applications/whatsapp/audio.py +2 -6
  104. universal_mcp/applications/whatsapp/whatsapp.py +17 -51
  105. universal_mcp/applications/whatsapp_business/app.py +86 -299
  106. universal_mcp/applications/wrike/app.py +80 -153
  107. universal_mcp/applications/yahoo_finance/app.py +19 -65
  108. universal_mcp/applications/youtube/app.py +120 -306
  109. universal_mcp/applications/zenquotes/app.py +4 -4
  110. {universal_mcp_applications-0.1.22.dist-info → universal_mcp_applications-0.1.39rc8.dist-info}/METADATA +4 -2
  111. {universal_mcp_applications-0.1.22.dist-info → universal_mcp_applications-0.1.39rc8.dist-info}/RECORD +113 -117
  112. {universal_mcp_applications-0.1.22.dist-info → universal_mcp_applications-0.1.39rc8.dist-info}/WHEEL +1 -1
  113. universal_mcp/applications/hubspot/api_segments/__init__.py +0 -0
  114. universal_mcp/applications/hubspot/api_segments/api_segment_base.py +0 -54
  115. universal_mcp/applications/hubspot/api_segments/crm_api.py +0 -7337
  116. universal_mcp/applications/hubspot/api_segments/marketing_api.py +0 -1467
  117. universal_mcp/applications/unipile/README.md +0 -28
  118. universal_mcp/applications/unipile/__init__.py +0 -1
  119. universal_mcp/applications/unipile/app.py +0 -1077
  120. {universal_mcp_applications-0.1.22.dist-info → universal_mcp_applications-0.1.39rc8.dist-info}/licenses/LICENSE +0 -0
@@ -1 +1,15 @@
1
- # Browser Use
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,76 +1,133 @@
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 import BrowserUseClient
6
+ from browser_use_sdk import AsyncBrowserUse
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._client = None
12
+ self._browser_client = None
13
13
 
14
14
  @property
15
- def client(self) -> BrowserUseClient:
16
- if self._client is not None:
17
- return self._client
15
+ def browser_client(self) -> AsyncBrowserUse:
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
- api_key = (
20
- credentials.get("api_key")
21
- or credentials.get("API_KEY")
22
- or credentials.get("apiKey")
23
- )
21
+ api_key = credentials.get("api_key") or credentials.get("API_KEY") or credentials.get("apiKey")
24
22
  if not api_key:
25
23
  raise ValueError("API key not found in integration credentials")
26
- self._client = BrowserUseClient(api_key=api_key)
27
- return self._client
24
+ self._browser_client = AsyncBrowserUse(api_key=api_key)
25
+ return self._browser_client
28
26
 
29
27
  async def browser_task(
30
28
  self,
31
- task: Annotated[str, "What you want the browser to do"],
32
- max_steps: Annotated[int, "Max actions to take (1-10, default: 8)"] = 8,
33
- llm: Annotated[str, "The LLM to use for the task"] = "gpt-4.1",
29
+ task: Annotated[str, "The objective of the task"],
30
+ max_steps: Annotated[int, "Max actions to take (default: 8)"] = 8,
31
+ llm: Annotated[
32
+ Literal[
33
+ "gpt-4.1",
34
+ "gpt-4.1-mini",
35
+ "o4-mini",
36
+ "o3",
37
+ "gemini-2.5-flash",
38
+ "gemini-2.5-pro",
39
+ "claude-sonnet-4-20250514",
40
+ "gpt-4o",
41
+ "gpt-4o-mini",
42
+ "llama-4-maverick-17b-128e-instruct",
43
+ "claude-3-7-sonnet-20250219",
44
+ ],
45
+ "The LLM to use",
46
+ ] = "gpt-4o",
47
+ session_id: Annotated[str | None, "Session ID to continue an existing session"] = None,
34
48
  ) -> dict:
35
49
  """
36
- Creates and runs a browser automation task.
50
+ 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.
37
51
 
38
52
  Args:
39
53
  task (str): The detailed description of the task for the browser to perform.
40
54
  max_steps (int, optional): The maximum number of actions the browser can take. Defaults to 8.
41
- llm (str, optional): The language model to use for interpreting the task. Defaults to "gpt-4.1".
55
+ llm (str, optional): The language model to use. Defaults to "gpt-4o".
56
+ session_id (str, optional): The ID of an existing session to use.
42
57
 
43
58
  Returns:
44
- dict: The result of the completed task, including output and other metadata.
59
+ dict: The task creation details including the task ID.
60
+
61
+ Tags:
62
+ browser, automation, background, task, web, research, create, important
45
63
  """
46
- created_task = self.client.tasks.create_task(
47
- llm=llm, task=task, max_steps=max_steps
64
+ created_task = await self.browser_client.tasks.create_task(
65
+ llm=llm, task=task, max_steps=max_steps, session_id=session_id
48
66
  )
49
- result = created_task.complete()
50
- return result.to_dict()
67
+
68
+ return created_task.model_dump()
51
69
 
52
70
  async def get_browser_task_status(
53
71
  self,
54
72
  task_id: Annotated[str, "Task ID to check"],
55
- enable_polling: Annotated[bool, "Auto-poll for 28s (default: true)"] = True,
56
73
  ) -> dict:
57
74
  """
58
- Checks task progress with smart polling.
59
-
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
+
60
77
  Args:
61
78
  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
79
 
64
80
  Returns:
65
- dict: The current status and details of the task.
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
85
+ """
86
+ task = await self.browser_client.tasks.get_task(task_id)
87
+ return task.model_dump()
88
+
89
+ async def list_tasks(
90
+ self,
91
+ page_size: Annotated[int, "Number of tasks to return (default: 10)"] = 10,
92
+ ) -> dict:
93
+ """
94
+ Lists recent browser automation tasks. Useful for finding lost task IDs or auditing recent activity.
95
+
96
+ Args:
97
+ page_size (int, optional): The number of tasks to retrieve. Defaults to 10.
98
+
99
+ Returns:
100
+ dict: A list of tasks with their basic details.
101
+
102
+ Tags:
103
+ list, history, browser, tasks, audit
104
+ """
105
+ tasks = await self.browser_client.tasks.list_tasks(page_size=page_size)
106
+ return tasks.model_dump()
107
+
108
+ async def stop_task(
109
+ self,
110
+ task_id: Annotated[str, "Task ID to stop"],
111
+ ) -> dict:
112
+ """
113
+ Stops a running browser automation task. Use this to cancel a stuck or long-running task.
114
+
115
+ Args:
116
+ task_id (str): The ID of the task to stop.
117
+
118
+ Returns:
119
+ dict: The updated task details showing the stopped status.
120
+
121
+ Tags:
122
+ stop, cancel, browser, task, control
66
123
  """
67
- if enable_polling:
68
- task = self.client.tasks.get(task_id)
69
- result = task.poll()
70
- return result.to_dict()
71
- else:
72
- task = self.client.tasks.get(task_id)
73
- return task.to_dict()
124
+ updated_task = await self.browser_client.tasks.update_task(task_id, action="stop")
125
+ return updated_task.model_dump()
74
126
 
75
127
  def list_tools(self):
76
- return [self.browser_task, self.get_browser_task_status]
128
+ return [
129
+ self.browser_task,
130
+ self.get_browser_task_status,
131
+ self.list_tasks,
132
+ self.stop_task,
133
+ ]