universal-mcp-applications 0.1.2__py3-none-any.whl → 0.1.3__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.
Files changed (80) hide show
  1. universal_mcp/applications/airtable/app.py +1 -0
  2. universal_mcp/applications/apollo/app.py +1 -0
  3. universal_mcp/applications/aws_s3/app.py +3 -4
  4. universal_mcp/applications/bill/app.py +3 -3
  5. universal_mcp/applications/box/app.py +2 -6
  6. universal_mcp/applications/braze/app.py +2 -6
  7. universal_mcp/applications/cal_com_v2/app.py +22 -64
  8. universal_mcp/applications/confluence/app.py +1 -0
  9. universal_mcp/applications/contentful/app.py +8 -19
  10. universal_mcp/applications/digitalocean/app.py +9 -27
  11. universal_mcp/applications/{domain-checker → domain_checker}/app.py +2 -1
  12. universal_mcp/applications/elevenlabs/app.py +98 -3188
  13. universal_mcp/applications/falai/app.py +1 -0
  14. universal_mcp/applications/file_system/__init__.py +1 -0
  15. universal_mcp/applications/file_system/app.py +96 -0
  16. universal_mcp/applications/fireflies/app.py +4 -3
  17. universal_mcp/applications/fpl/app.py +1 -0
  18. universal_mcp/applications/fpl/utils/fixtures.py +1 -1
  19. universal_mcp/applications/fpl/utils/helper.py +1 -1
  20. universal_mcp/applications/fpl/utils/position_utils.py +0 -1
  21. universal_mcp/applications/{ghost-content → ghost_content}/app.py +2 -1
  22. universal_mcp/applications/github/app.py +3 -1
  23. universal_mcp/applications/google_calendar/app.py +2 -1
  24. universal_mcp/applications/google_docs/app.py +1 -1
  25. universal_mcp/applications/google_drive/app.py +2 -1
  26. universal_mcp/applications/google_gemini/app.py +138 -618
  27. universal_mcp/applications/google_mail/app.py +2 -1
  28. universal_mcp/applications/{google-searchconsole → google_searchconsole}/app.py +1 -1
  29. universal_mcp/applications/google_sheet/app.py +2 -1
  30. universal_mcp/applications/google_sheet/helper.py +156 -116
  31. universal_mcp/applications/hashnode/app.py +1 -0
  32. universal_mcp/applications/{http-tools → http_tools}/app.py +2 -1
  33. universal_mcp/applications/hubspot/app.py +4 -1
  34. universal_mcp/applications/jira/app.py +7 -18
  35. universal_mcp/applications/markitdown/app.py +2 -3
  36. universal_mcp/applications/ms_teams/app.py +1 -1
  37. universal_mcp/applications/openai/app.py +2 -3
  38. universal_mcp/applications/outlook/app.py +1 -3
  39. universal_mcp/applications/pipedrive/app.py +2 -6
  40. universal_mcp/applications/reddit/app.py +1 -0
  41. universal_mcp/applications/replicate/app.py +3 -3
  42. universal_mcp/applications/resend/app.py +1 -2
  43. universal_mcp/applications/rocketlane/app.py +1 -0
  44. universal_mcp/applications/semrush/app.py +1 -1
  45. universal_mcp/applications/sentry/README.md +20 -20
  46. universal_mcp/applications/sentry/app.py +40 -40
  47. universal_mcp/applications/serpapi/app.py +2 -2
  48. universal_mcp/applications/sharepoint/app.py +1 -0
  49. universal_mcp/applications/shopify/app.py +1 -0
  50. universal_mcp/applications/slack/app.py +3 -3
  51. universal_mcp/applications/trello/app.py +9 -27
  52. universal_mcp/applications/twilio/__init__.py +1 -0
  53. universal_mcp/applications/{twillo → twilio}/app.py +2 -2
  54. universal_mcp/applications/twitter/README.md +1 -1
  55. universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +2 -2
  56. universal_mcp/applications/twitter/api_segments/lists_api.py +1 -1
  57. universal_mcp/applications/unipile/app.py +5 -1
  58. universal_mcp/applications/whatsapp/app.py +18 -17
  59. universal_mcp/applications/whatsapp/audio.py +110 -0
  60. universal_mcp/applications/whatsapp/whatsapp.py +398 -0
  61. universal_mcp/applications/whatsapp_business/app.py +1 -1
  62. universal_mcp/applications/youtube/app.py +195 -191
  63. universal_mcp/applications/zenquotes/app.py +1 -1
  64. {universal_mcp_applications-0.1.2.dist-info → universal_mcp_applications-0.1.3.dist-info}/METADATA +4 -2
  65. {universal_mcp_applications-0.1.2.dist-info → universal_mcp_applications-0.1.3.dist-info}/RECORD +76 -75
  66. universal_mcp/applications/google-ads/__init__.py +0 -1
  67. universal_mcp/applications/google-ads/app.py +0 -23
  68. universal_mcp/applications/twillo/README.md +0 -0
  69. universal_mcp/applications/twillo/__init__.py +0 -1
  70. /universal_mcp/applications/{domain-checker → domain_checker}/README.md +0 -0
  71. /universal_mcp/applications/{domain-checker → domain_checker}/__init__.py +0 -0
  72. /universal_mcp/applications/{ghost-content → ghost_content}/README.md +0 -0
  73. /universal_mcp/applications/{ghost-content → ghost_content}/__init__.py +0 -0
  74. /universal_mcp/applications/{google-searchconsole → google_searchconsole}/README.md +0 -0
  75. /universal_mcp/applications/{google-searchconsole → google_searchconsole}/__init__.py +0 -0
  76. /universal_mcp/applications/{http-tools → http_tools}/README.md +0 -0
  77. /universal_mcp/applications/{http-tools → http_tools}/__init__.py +0 -0
  78. /universal_mcp/applications/{google-ads → twilio}/README.md +0 -0
  79. {universal_mcp_applications-0.1.2.dist-info → universal_mcp_applications-0.1.3.dist-info}/WHEEL +0 -0
  80. {universal_mcp_applications-0.1.2.dist-info → universal_mcp_applications-0.1.3.dist-info}/licenses/LICENSE +0 -0
@@ -3,6 +3,7 @@ from typing import Any, Literal
3
3
 
4
4
  from fal_client import AsyncClient, AsyncRequestHandle, Status
5
5
  from loguru import logger
6
+
6
7
  from universal_mcp.applications.application import APIApplication
7
8
  from universal_mcp.exceptions import NotAuthorizedError, ToolError
8
9
  from universal_mcp.integrations import Integration
@@ -0,0 +1 @@
1
+ from .app import FileSystemApp
@@ -0,0 +1,96 @@
1
+ import os
2
+ import shutil
3
+ import uuid
4
+
5
+ from universal_mcp.applications.application import BaseApplication
6
+
7
+
8
+ class FileSystemApp(BaseApplication):
9
+ def __init__(self, **kwargs):
10
+ super().__init__(name="file_system", **kwargs)
11
+
12
+ @staticmethod
13
+ async def _generate_file_path():
14
+ return f"/tmp/{uuid.uuid4()}"
15
+
16
+ @staticmethod
17
+ async def read_file(file_path: str):
18
+ """Reads file data from a file path.
19
+
20
+ Args:
21
+ file_path (str): The path to the file to read.
22
+
23
+ Returns:
24
+ bytes: The file content as bytes.
25
+
26
+ Raises:
27
+ FileNotFoundError: If the file doesn't exist.
28
+ IOError: If there's an error reading the file.
29
+
30
+ Tags:
31
+ important
32
+ """
33
+ with open(file_path, "rb") as f:
34
+ return f.read()
35
+
36
+ @staticmethod
37
+ async def write_file(file_data: bytes, file_path: str = None):
38
+ """Writes file data to a file path.
39
+
40
+ Args:
41
+ file_data (bytes): The data to write to the file.
42
+ file_path (str, optional): The path where to write the file.
43
+ If None, generates a random path in /tmp. Defaults to None.
44
+
45
+ Returns:
46
+ dict: A dictionary containing the operation result with keys:
47
+ - status (str): "success" if the operation completed successfully
48
+ - data (dict): Contains file information with keys:
49
+ - url (str): The file path where the data was written
50
+ - filename (str): The filename (same as url in this implementation)
51
+ - size (int): The size of the written data in bytes
52
+
53
+ Raises:
54
+ IOError: If there's an error writing the file.
55
+ PermissionError: If there are insufficient permissions to write to the path.
56
+
57
+ Tags:
58
+ important
59
+ """
60
+ if file_path is None:
61
+ file_path = await FileSystemApp._generate_file_path()
62
+ with open(file_path, "wb") as f:
63
+ f.write(file_data)
64
+ result = {
65
+ "status": "success",
66
+ "data": {
67
+ "url": file_path,
68
+ "filename": file_path,
69
+ "size": len(file_data),
70
+ },
71
+ }
72
+ return result
73
+
74
+ @staticmethod
75
+ async def delete_file(file_path: str):
76
+ """Deletes a file from the file system."""
77
+ os.remove(file_path)
78
+ return {"status": "success"}
79
+
80
+ @staticmethod
81
+ async def move_file(source_file_path: str, dest_file_path: str):
82
+ """Moves a file from one path to another."""
83
+ os.rename(source_file_path, dest_file_path)
84
+ return {"status": "success"}
85
+
86
+ @staticmethod
87
+ async def copy_file(source_file_path: str, dest_file_path: str):
88
+ """Copies a file from one path to another."""
89
+ shutil.copy(source_file_path, dest_file_path)
90
+ return {"status": "success"}
91
+
92
+ def list_tools(self):
93
+ return [
94
+ FileSystemApp.read_file,
95
+ FileSystemApp.write_file,
96
+ ]
@@ -1,10 +1,11 @@
1
- from collections.abc import Callable # For type hinting
1
+ from collections.abc import Callable
2
2
  from typing import Any
3
3
 
4
4
  from gql import gql
5
- from universal_mcp.applications import (
5
+
6
+ from universal_mcp.applications.application import (
6
7
  GraphQLApplication,
7
- ) # Assuming this is in a reachable path
8
+ )
8
9
  from universal_mcp.integrations import Integration
9
10
 
10
11
 
@@ -3,6 +3,7 @@ from datetime import datetime
3
3
  from typing import Any
4
4
 
5
5
  import requests
6
+
6
7
  from universal_mcp.applications.application import APIApplication
7
8
  from universal_mcp.integrations import Integration
8
9
 
@@ -3,7 +3,7 @@
3
3
  import logging
4
4
  from typing import Any
5
5
 
6
- from universal_mcp_fpl.utils.api import api
6
+ from .api import api
7
7
 
8
8
  # Set up logging following project conventions
9
9
  logger = logging.getLogger("fpl-mcp-server.fixtures")
@@ -3,7 +3,7 @@ import logging
3
3
  from typing import Any
4
4
 
5
5
  logger = logging.getLogger("fpl-mcp-server.fixtures")
6
- from universal_mcp_fpl.utils.api import api
6
+ from .api import api
7
7
 
8
8
  # Resources
9
9
 
@@ -1,6 +1,5 @@
1
1
  """Utilities for normalizing position terms in FPL context."""
2
2
 
3
-
4
3
  # Comprehensive position mapping dictionary
5
4
  POSITION_MAPPINGS = {
6
5
  # Standard FPL codes
@@ -2,6 +2,7 @@ from collections.abc import Callable
2
2
  from typing import Any
3
3
 
4
4
  from loguru import logger
5
+
5
6
  from universal_mcp.applications.application import APIApplication
6
7
  from universal_mcp.integrations import Integration
7
8
 
@@ -24,7 +25,7 @@ class GhostContentApp(APIApplication):
24
25
  "https://your-ghost-site.com") and 'key' (the Content API key)
25
26
  via `integration.get_credentials()`.
26
27
  """
27
- super().__init__(name="ghost-content", integration=integration)
28
+ super().__init__(name="ghost_content", integration=integration)
28
29
  self._base_url = None
29
30
  self._api_key = None # Cache the API key
30
31
  self._version = None # Cache the version
@@ -1,6 +1,7 @@
1
1
  from typing import Any
2
2
 
3
3
  from loguru import logger
4
+
4
5
  from universal_mcp.applications.application import APIApplication
5
6
  from universal_mcp.integrations import Integration
6
7
 
@@ -4469,7 +4470,8 @@ class GithubApp(APIApplication):
4469
4470
  dependabot_security_updates_enabled_for_new_repositories: bool | None = None,
4470
4471
  dependency_graph_enabled_for_new_repositories: bool | None = None,
4471
4472
  secret_scanning_enabled_for_new_repositories: bool | None = None,
4472
- secret_scanning_push_protection_enabled_for_new_repositories: bool | None = None,
4473
+ secret_scanning_push_protection_enabled_for_new_repositories: bool
4474
+ | None = None,
4473
4475
  secret_scanning_push_protection_custom_link_enabled: bool | None = None,
4474
4476
  secret_scanning_push_protection_custom_link: str | None = None,
4475
4477
  deploy_keys_enabled_for_repositories: bool | None = None,
@@ -2,13 +2,14 @@ from datetime import UTC, datetime, timedelta
2
2
  from typing import Any
3
3
 
4
4
  from loguru import logger
5
+
5
6
  from universal_mcp.applications.application import APIApplication
6
7
  from universal_mcp.integrations import Integration
7
8
 
8
9
 
9
10
  class GoogleCalendarApp(APIApplication):
10
11
  def __init__(self, integration: Integration) -> None:
11
- super().__init__(name="google-calendar", integration=integration)
12
+ super().__init__(name="google_calendar", integration=integration)
12
13
  self.base_api_url = "https://www.googleapis.com/calendar/v3/calendars/primary"
13
14
  self.base_url = "https://www.googleapis.com/calendar/v3"
14
15
 
@@ -6,7 +6,7 @@ from universal_mcp.integrations import Integration
6
6
 
7
7
  class GoogleDocsApp(APIApplication):
8
8
  def __init__(self, integration: Integration) -> None:
9
- super().__init__(name="google-docs", integration=integration)
9
+ super().__init__(name="google_docs", integration=integration)
10
10
  self.base_api_url = "https://docs.googleapis.com/v1/documents"
11
11
 
12
12
  def create_document(self, title: str) -> dict[str, Any]:
@@ -2,6 +2,7 @@ from typing import Any
2
2
 
3
3
  import httpx
4
4
  from loguru import logger
5
+
5
6
  from universal_mcp.applications.application import APIApplication
6
7
  from universal_mcp.integrations import Integration
7
8
 
@@ -13,7 +14,7 @@ class GoogleDriveApp(APIApplication):
13
14
  """
14
15
 
15
16
  def __init__(self, integration: Integration | None = None) -> None:
16
- super().__init__(name="google-drive", integration=integration)
17
+ super().__init__(name="google_drive", integration=integration)
17
18
  self.base_url = "https://www.googleapis.com/drive/v3"
18
19
 
19
20
  def move_files(