universal-mcp-applications 0.1.16__py3-none-any.whl → 0.1.18__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/falai/app.py +6 -6
- universal_mcp/applications/firecrawl/app.py +10 -10
- universal_mcp/applications/github/app.py +9 -9
- universal_mcp/applications/google_calendar/app.py +10 -10
- universal_mcp/applications/google_docs/app.py +12 -12
- universal_mcp/applications/google_drive/app.py +38 -38
- universal_mcp/applications/google_gemini/app.py +13 -12
- universal_mcp/applications/google_mail/app.py +19 -19
- universal_mcp/applications/google_searchconsole/app.py +8 -8
- universal_mcp/applications/google_sheet/app.py +22 -22
- universal_mcp/applications/linkedin/app.py +4 -4
- universal_mcp/applications/ms_teams/app.py +28 -28
- universal_mcp/applications/outlook/app.py +9 -9
- universal_mcp/applications/reddit/app.py +90 -89
- universal_mcp/applications/scraper/app.py +31 -31
- universal_mcp/applications/sharepoint/app.py +7 -7
- universal_mcp/applications/unipile/app.py +14 -14
- {universal_mcp_applications-0.1.16.dist-info → universal_mcp_applications-0.1.18.dist-info}/METADATA +1 -1
- {universal_mcp_applications-0.1.16.dist-info → universal_mcp_applications-0.1.18.dist-info}/RECORD +21 -21
- {universal_mcp_applications-0.1.16.dist-info → universal_mcp_applications-0.1.18.dist-info}/WHEEL +0 -0
- {universal_mcp_applications-0.1.16.dist-info → universal_mcp_applications-0.1.18.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from dotenv import load_dotenv
|
|
3
|
+
|
|
3
4
|
load_dotenv()
|
|
4
5
|
|
|
5
6
|
from typing import Any
|
|
6
7
|
|
|
7
8
|
from universal_mcp.applications.application import APIApplication
|
|
8
|
-
from universal_mcp.agentr.integration import AgentrIntegration
|
|
9
9
|
from universal_mcp.applications.unipile import UnipileApp
|
|
10
10
|
from typing import Any, Optional
|
|
11
|
+
from universal_mcp.integrations import Integration
|
|
12
|
+
from loguru import logger
|
|
13
|
+
|
|
11
14
|
|
|
12
15
|
class ScraperApp(APIApplication):
|
|
13
16
|
"""
|
|
@@ -15,7 +18,7 @@ class ScraperApp(APIApplication):
|
|
|
15
18
|
Provides a simplified interface for LinkedIn search operations.
|
|
16
19
|
"""
|
|
17
20
|
|
|
18
|
-
def __init__(self, **kwargs: Any) -> None:
|
|
21
|
+
def __init__(self, integration: Integration, **kwargs: Any) -> None:
|
|
19
22
|
"""
|
|
20
23
|
Initialize the ScraperApp.
|
|
21
24
|
|
|
@@ -24,17 +27,16 @@ class ScraperApp(APIApplication):
|
|
|
24
27
|
It is expected that the integration provides the necessary credentials
|
|
25
28
|
for LinkedIn API access.
|
|
26
29
|
"""
|
|
27
|
-
super().__init__(name="scraper", **kwargs)
|
|
30
|
+
super().__init__(name="scraper", integration=integration, **kwargs)
|
|
28
31
|
if self.integration:
|
|
29
32
|
credentials = self.integration.get_credentials()
|
|
30
|
-
|
|
31
|
-
self.account_id = credentials.get("ACCOUNT_ID")
|
|
32
|
-
self.integration = AgentrIntegration(name="unipile", api_key=api_key, base_url="https://staging-agentr-306776579029.asia-southeast1.run.app/")
|
|
33
|
+
self.account_id = credentials.get("account_id")
|
|
33
34
|
self._unipile_app = UnipileApp(integration=self.integration)
|
|
34
35
|
else:
|
|
36
|
+
logger.warning(f"Integration not found")
|
|
35
37
|
self.account_id = None
|
|
36
38
|
self._unipile_app = None
|
|
37
|
-
|
|
39
|
+
|
|
38
40
|
def linkedin_post_search(
|
|
39
41
|
self,
|
|
40
42
|
category: str = "posts",
|
|
@@ -48,7 +50,7 @@ class ScraperApp(APIApplication):
|
|
|
48
50
|
) -> dict[str, Any]:
|
|
49
51
|
"""
|
|
50
52
|
Performs a general LinkedIn search for posts using keywords and filters like date and content type. It supports pagination and can utilize either the 'classic' or 'sales_navigator' API, searching broadly across the platform rather than fetching posts from a specific user's profile.
|
|
51
|
-
|
|
53
|
+
|
|
52
54
|
Args:
|
|
53
55
|
category: Type of search to perform (defaults to "posts").
|
|
54
56
|
api: Which LinkedIn API to use - "classic" or "sales_navigator".
|
|
@@ -58,17 +60,17 @@ class ScraperApp(APIApplication):
|
|
|
58
60
|
sort_by: How to sort the results, e.g., "relevance" or "date".
|
|
59
61
|
date_posted: Filter posts by when they were posted.
|
|
60
62
|
content_type: Filter by the type of content in the post. Example: "videos", "images", "live_videos", "collaborative_articles", "documents"
|
|
61
|
-
|
|
63
|
+
|
|
62
64
|
Returns:
|
|
63
65
|
A dictionary containing search results and pagination details.
|
|
64
|
-
|
|
66
|
+
|
|
65
67
|
Raises:
|
|
66
68
|
httpx.HTTPError: If the API request fails.
|
|
67
|
-
|
|
69
|
+
|
|
68
70
|
Tags:
|
|
69
71
|
linkedin, search, posts, api, scrapper, important
|
|
70
72
|
"""
|
|
71
|
-
|
|
73
|
+
|
|
72
74
|
return self._unipile_app.search(
|
|
73
75
|
account_id=self.account_id,
|
|
74
76
|
category=category,
|
|
@@ -89,22 +91,22 @@ class ScraperApp(APIApplication):
|
|
|
89
91
|
) -> dict[str, Any]:
|
|
90
92
|
"""
|
|
91
93
|
Fetches a paginated list of all LinkedIn posts from a specific user or company profile using their unique identifier. This function retrieves content directly from a profile, unlike `linkedin_post_search` which finds posts across LinkedIn based on keywords and other filters.
|
|
92
|
-
|
|
94
|
+
|
|
93
95
|
Args:
|
|
94
96
|
identifier: The entity's provider internal ID (LinkedIn ID).starts with ACo for users, while for companies it's a series of numbers.
|
|
95
97
|
cursor: Pagination cursor for the next page of entries.
|
|
96
98
|
limit: Number of items to return (1-100, though spec allows up to 250).
|
|
97
|
-
|
|
99
|
+
|
|
98
100
|
Returns:
|
|
99
101
|
A dictionary containing a list of post objects and pagination details.
|
|
100
|
-
|
|
102
|
+
|
|
101
103
|
Raises:
|
|
102
104
|
httpx.HTTPError: If the API request fails.
|
|
103
|
-
|
|
105
|
+
|
|
104
106
|
Tags:
|
|
105
107
|
linkedin, post, list, user_posts, company_posts, content, api, important
|
|
106
108
|
"""
|
|
107
|
-
|
|
109
|
+
|
|
108
110
|
return self._unipile_app.list_profile_posts(
|
|
109
111
|
identifier=identifier,
|
|
110
112
|
account_id=self.account_id,
|
|
@@ -118,27 +120,26 @@ class ScraperApp(APIApplication):
|
|
|
118
120
|
) -> dict[str, Any]:
|
|
119
121
|
"""
|
|
120
122
|
Retrieves a specific LinkedIn user's profile by their unique identifier, which can be an internal provider ID or a public username. This function simplifies data access by delegating the actual profile retrieval request to the integrated Unipile application, distinct from functions that list posts or comments.
|
|
121
|
-
|
|
123
|
+
|
|
122
124
|
Args:
|
|
123
125
|
identifier: Can be the provider's internal id OR the provider's public id of the requested user.
|
|
124
126
|
For example, for https://www.linkedin.com/in/manojbajaj95/, the identifier is "manojbajaj95".
|
|
125
|
-
|
|
127
|
+
|
|
126
128
|
Returns:
|
|
127
129
|
A dictionary containing the user's profile details.
|
|
128
|
-
|
|
130
|
+
|
|
129
131
|
Raises:
|
|
130
132
|
httpx.HTTPError: If the API request fails.
|
|
131
|
-
|
|
133
|
+
|
|
132
134
|
Tags:
|
|
133
135
|
linkedin, user, profile, retrieve, get, api, important
|
|
134
136
|
"""
|
|
135
|
-
|
|
137
|
+
|
|
136
138
|
return self._unipile_app.retrieve_user_profile(
|
|
137
139
|
identifier=identifier,
|
|
138
140
|
account_id=self.account_id,
|
|
139
141
|
)
|
|
140
142
|
|
|
141
|
-
|
|
142
143
|
def linkedin_list_post_comments(
|
|
143
144
|
self,
|
|
144
145
|
post_id: str,
|
|
@@ -148,23 +149,23 @@ class ScraperApp(APIApplication):
|
|
|
148
149
|
) -> dict[str, Any]:
|
|
149
150
|
"""
|
|
150
151
|
Fetches comments for a specified LinkedIn post. If a `comment_id` is provided, it retrieves replies to that comment instead of top-level comments. This function supports pagination and specifically targets comments, unlike others in the class that search for or list entire posts.
|
|
151
|
-
|
|
152
|
+
|
|
152
153
|
Args:
|
|
153
154
|
post_id: The social ID of the post. Example rn:li:activity:7342082869034393600
|
|
154
155
|
comment_id: If provided, retrieves replies to this comment ID instead of top-level comments.
|
|
155
156
|
cursor: Pagination cursor.
|
|
156
157
|
limit: Number of comments to return.
|
|
157
|
-
|
|
158
|
+
|
|
158
159
|
Returns:
|
|
159
160
|
A dictionary containing a list of comment objects and pagination details.
|
|
160
|
-
|
|
161
|
+
|
|
161
162
|
Raises:
|
|
162
163
|
httpx.HTTPError: If the API request fails.
|
|
163
|
-
|
|
164
|
+
|
|
164
165
|
Tags:
|
|
165
166
|
linkedin, post, comment, list, content, api, important
|
|
166
167
|
"""
|
|
167
|
-
|
|
168
|
+
|
|
168
169
|
return self._unipile_app.list_post_comments(
|
|
169
170
|
post_id=post_id,
|
|
170
171
|
account_id=self.account_id,
|
|
@@ -173,11 +174,10 @@ class ScraperApp(APIApplication):
|
|
|
173
174
|
limit=limit,
|
|
174
175
|
)
|
|
175
176
|
|
|
176
|
-
|
|
177
177
|
def list_tools(self):
|
|
178
178
|
"""
|
|
179
179
|
Returns a list of available tools/functions in this application.
|
|
180
|
-
|
|
180
|
+
|
|
181
181
|
Returns:
|
|
182
182
|
A list of functions that can be used as tools.
|
|
183
183
|
"""
|
|
@@ -186,4 +186,4 @@ class ScraperApp(APIApplication):
|
|
|
186
186
|
self.linkedin_list_profile_posts,
|
|
187
187
|
self.linkedin_retrieve_profile,
|
|
188
188
|
self.linkedin_list_post_comments,
|
|
189
|
-
|
|
189
|
+
]
|
|
@@ -36,7 +36,7 @@ class SharepointApp(BaseApplication):
|
|
|
36
36
|
@property
|
|
37
37
|
def client(self):
|
|
38
38
|
"""
|
|
39
|
-
A lazy-loaded property that gets or creates an authenticated GraphClient instance. On
|
|
39
|
+
A lazy-loaded property that gets or creates an authenticated GraphClient instance. On first access, it uses integration credentials to initialize the client, fetches initial user and site data, and caches the instance for subsequent use, ensuring efficient connection management for all SharePoint operations.
|
|
40
40
|
|
|
41
41
|
Returns:
|
|
42
42
|
GraphClient: The authenticated GraphClient instance.
|
|
@@ -74,7 +74,7 @@ class SharepointApp(BaseApplication):
|
|
|
74
74
|
|
|
75
75
|
def list_folders(self, folder_path: str | None = None) -> list[dict[str, Any]]:
|
|
76
76
|
"""
|
|
77
|
-
Retrieves
|
|
77
|
+
Retrieves a list of immediate subfolder names within a specified SharePoint directory. If no path is provided, it defaults to the root drive. This function is distinct from `list_files`, as it exclusively lists directories, not files.
|
|
78
78
|
|
|
79
79
|
Args:
|
|
80
80
|
folder_path (Optional[str], optional): The path to the parent folder. If None, lists folders in the root.
|
|
@@ -97,7 +97,7 @@ class SharepointApp(BaseApplication):
|
|
|
97
97
|
self, folder_name: str, folder_path: str | None = None
|
|
98
98
|
) -> dict[str, Any]:
|
|
99
99
|
"""
|
|
100
|
-
Creates a new folder with a given name inside a specified parent directory
|
|
100
|
+
Creates a new folder with a given name inside a specified parent directory (or the root). It then returns an updated list of all folder names within that same directory, effectively confirming that the creation operation was successful.
|
|
101
101
|
|
|
102
102
|
Args:
|
|
103
103
|
folder_name (str): The name of the folder to create.
|
|
@@ -118,7 +118,7 @@ class SharepointApp(BaseApplication):
|
|
|
118
118
|
|
|
119
119
|
def list_files(self, folder_path: str) -> list[dict[str, Any]]:
|
|
120
120
|
"""
|
|
121
|
-
Retrieves files
|
|
121
|
+
Retrieves metadata for all files in a specified folder. For each file, it returns key details like name, URL, size, and timestamps. This function exclusively lists file properties, distinguishing it from `list_folders` (which lists directories) and `get_document_content` (which retrieves file content).
|
|
122
122
|
|
|
123
123
|
Args:
|
|
124
124
|
folder_path (str): The path to the folder whose documents are to be listed.
|
|
@@ -147,7 +147,7 @@ class SharepointApp(BaseApplication):
|
|
|
147
147
|
self, file_path: str, file_name: str, content: str
|
|
148
148
|
) -> dict[str, Any]:
|
|
149
149
|
"""
|
|
150
|
-
Uploads string content to a new file
|
|
150
|
+
Uploads string content to create a new file in a specified SharePoint folder. To confirm the operation, it returns an updated list of all files and their metadata from that directory, including the newly created file.
|
|
151
151
|
|
|
152
152
|
Args:
|
|
153
153
|
file_path (str): The path to the folder where the document will be created.
|
|
@@ -167,7 +167,7 @@ class SharepointApp(BaseApplication):
|
|
|
167
167
|
|
|
168
168
|
def get_document_content(self, file_path: str) -> dict[str, Any]:
|
|
169
169
|
"""
|
|
170
|
-
Retrieves a
|
|
170
|
+
Retrieves a file's content from a specified SharePoint path. It returns a dictionary containing the file's name and size, decoding text files as a string and Base64-encoding binary files. Unlike `list_files`, which only fetches metadata, this function provides the actual file content.
|
|
171
171
|
|
|
172
172
|
Args:
|
|
173
173
|
file_path (str): The path to the document.
|
|
@@ -200,7 +200,7 @@ class SharepointApp(BaseApplication):
|
|
|
200
200
|
|
|
201
201
|
def delete_document(self, file_path: str):
|
|
202
202
|
"""
|
|
203
|
-
Permanently deletes a specified file from SharePoint
|
|
203
|
+
Permanently deletes a specified file from a SharePoint drive using its full path. This is the sole destructive file operation, contrasting with functions that read or create files. It returns `True` on successful deletion and raises an exception on failure, such as if the file is not found.
|
|
204
204
|
|
|
205
205
|
Args:
|
|
206
206
|
file_path (str): The path to the file to delete.
|
|
@@ -31,7 +31,7 @@ class UnipileApp(APIApplication):
|
|
|
31
31
|
@property
|
|
32
32
|
def base_url(self) -> str:
|
|
33
33
|
"""
|
|
34
|
-
A property that lazily constructs and caches the Unipile API base URL
|
|
34
|
+
A property that lazily constructs and caches the Unipile API base URL from 'subdomain' and 'port' credentials. Built on first access and used by all API methods, it raises a ValueError if credentials are missing. This is the default construction, unlike the setter which allows manual override.
|
|
35
35
|
"""
|
|
36
36
|
if not self._base_url:
|
|
37
37
|
credentials = self.integration.get_credentials()
|
|
@@ -50,7 +50,7 @@ class UnipileApp(APIApplication):
|
|
|
50
50
|
@base_url.setter
|
|
51
51
|
def base_url(self, base_url: str) -> None:
|
|
52
52
|
"""
|
|
53
|
-
Sets or overrides the
|
|
53
|
+
Sets or overrides the Unipile API's base URL. This setter allows manually changing the endpoint, bypassing the default URL that is dynamically constructed from integration credentials. It is primarily intended for testing against different environments or for custom deployments.
|
|
54
54
|
|
|
55
55
|
Args:
|
|
56
56
|
base_url: The new base URL to set.
|
|
@@ -154,7 +154,7 @@ class UnipileApp(APIApplication):
|
|
|
154
154
|
sender_id: str | None = None,
|
|
155
155
|
) -> dict[str, Any]:
|
|
156
156
|
"""
|
|
157
|
-
Retrieves messages from a specific chat identified by `chat_id`.
|
|
157
|
+
Retrieves messages from a specific chat identified by `chat_id`. Supports pagination and filtering by date or sender. Unlike `list_all_messages`, which fetches from all chats, this function targets the contents of a single conversation.
|
|
158
158
|
|
|
159
159
|
Args:
|
|
160
160
|
chat_id: The ID of the chat to retrieve messages from.
|
|
@@ -195,7 +195,7 @@ class UnipileApp(APIApplication):
|
|
|
195
195
|
text: str,
|
|
196
196
|
) -> dict[str, Any]:
|
|
197
197
|
"""
|
|
198
|
-
Sends a text message to a specific chat
|
|
198
|
+
Sends a text message to a specific chat conversation using its `chat_id`. This function creates a new message via a POST request, distinguishing it from read-only functions like `list_chat_messages`. It returns the API's response, which typically confirms the successful creation of the message.
|
|
199
199
|
|
|
200
200
|
Args:
|
|
201
201
|
chat_id: The ID of the chat where the message will be sent.
|
|
@@ -221,7 +221,7 @@ class UnipileApp(APIApplication):
|
|
|
221
221
|
self, chat_id: str, account_id: str | None = None
|
|
222
222
|
) -> dict[str, Any]:
|
|
223
223
|
"""
|
|
224
|
-
Retrieves a single chat
|
|
224
|
+
Retrieves a single chat's details using its Unipile or provider-specific ID. Requires an `account_id` when using a provider ID for context. This function is distinct from `list_all_chats`, which returns a collection, by targeting one specific conversation.
|
|
225
225
|
|
|
226
226
|
Args:
|
|
227
227
|
chat_id: The Unipile or provider ID of the chat.
|
|
@@ -327,7 +327,7 @@ class UnipileApp(APIApplication):
|
|
|
327
327
|
account_id: str,
|
|
328
328
|
) -> dict[str, Any]:
|
|
329
329
|
"""
|
|
330
|
-
Retrieves
|
|
330
|
+
Retrieves details for a specific account linked to Unipile using its ID. It fetches metadata about the connection itself (e.g., a linked LinkedIn account), differentiating it from `retrieve_user_profile` which fetches a user's profile from the external platform.
|
|
331
331
|
|
|
332
332
|
Args:
|
|
333
333
|
account_id: The ID of the account to retrieve.
|
|
@@ -354,7 +354,7 @@ class UnipileApp(APIApplication):
|
|
|
354
354
|
is_company: bool | None = None,
|
|
355
355
|
) -> dict[str, Any]:
|
|
356
356
|
"""
|
|
357
|
-
Retrieves a paginated list of posts from a specific user or company profile using their provider ID.
|
|
357
|
+
Retrieves a paginated list of posts from a specific user or company profile using their provider ID. An authorizing `account_id` is required, and the `is_company` flag must specify the entity type, distinguishing this from `retrieve_post` which fetches a single post by its own ID.
|
|
358
358
|
|
|
359
359
|
Args:
|
|
360
360
|
identifier: The entity's provider internal ID (LinkedIn ID).
|
|
@@ -389,7 +389,7 @@ class UnipileApp(APIApplication):
|
|
|
389
389
|
account_id: str,
|
|
390
390
|
) -> dict[str, Any]:
|
|
391
391
|
"""
|
|
392
|
-
Retrieves the profile details for the user associated with the specified Unipile account ID. This function targets the API's 'me' endpoint to fetch the
|
|
392
|
+
Retrieves the profile details for the user associated with the specified Unipile account ID. This function targets the API's 'me' endpoint to fetch the authenticated user's profile, distinct from `retrieve_user_profile` which fetches profiles of other users by their public identifier.
|
|
393
393
|
|
|
394
394
|
Args:
|
|
395
395
|
account_id: The ID of the Unipile account to use for retrieving the profile (REQUIRED).
|
|
@@ -414,7 +414,7 @@ class UnipileApp(APIApplication):
|
|
|
414
414
|
account_id: str,
|
|
415
415
|
) -> dict[str, Any]:
|
|
416
416
|
"""
|
|
417
|
-
Fetches
|
|
417
|
+
Fetches a specific post's details by its unique ID, requiring an `account_id` for authorization. Unlike `list_profile_posts`, which retrieves a collection of posts from a user or company profile, this function targets one specific post and returns its full object.
|
|
418
418
|
|
|
419
419
|
Args:
|
|
420
420
|
post_id: The ID of the post to retrieve.
|
|
@@ -443,7 +443,7 @@ class UnipileApp(APIApplication):
|
|
|
443
443
|
limit: int | None = None,
|
|
444
444
|
) -> dict[str, Any]:
|
|
445
445
|
"""
|
|
446
|
-
Fetches comments for a specific post.
|
|
446
|
+
Fetches comments for a specific post using an `account_id` for authorization. Providing an optional `comment_id` retrieves threaded replies instead of top-level comments. This read-only operation contrasts with `create_post_comment`, which publishes new comments, and `list_content_reactions`, which retrieves 'likes'.
|
|
447
447
|
|
|
448
448
|
Args:
|
|
449
449
|
post_id: The social ID of the post.
|
|
@@ -481,7 +481,7 @@ class UnipileApp(APIApplication):
|
|
|
481
481
|
external_link: str | None = None,
|
|
482
482
|
) -> dict[str, Any]:
|
|
483
483
|
"""
|
|
484
|
-
Publishes a new post
|
|
484
|
+
Publishes a new top-level post from a specified account, including text, user mentions, and an external link. This function creates original content, distinguishing it from `create_post_comment` which adds replies to existing posts.
|
|
485
485
|
|
|
486
486
|
Args:
|
|
487
487
|
account_id: The ID of the Unipile account that will author the post (added as query parameter).
|
|
@@ -523,7 +523,7 @@ class UnipileApp(APIApplication):
|
|
|
523
523
|
limit: int | None = None,
|
|
524
524
|
) -> dict[str, Any]:
|
|
525
525
|
"""
|
|
526
|
-
Retrieves a paginated list of reactions for a given post or, optionally, a specific comment. This read-only operation uses the provided `account_id` for the request, distinguishing it from `
|
|
526
|
+
Retrieves a paginated list of reactions for a given post or, optionally, a specific comment. This read-only operation uses the provided `account_id` for the request, distinguishing it from the `create_reaction` function which adds new reactions.
|
|
527
527
|
|
|
528
528
|
Args:
|
|
529
529
|
post_id: The social ID of the post.
|
|
@@ -613,7 +613,7 @@ class UnipileApp(APIApplication):
|
|
|
613
613
|
comment_id: str | None = None,
|
|
614
614
|
) -> dict[str, Any]:
|
|
615
615
|
"""
|
|
616
|
-
Adds a specified reaction (e.g., 'like', 'love') to a LinkedIn post or, optionally, to a specific comment. This function performs a POST request to create the reaction, differentiating it from `
|
|
616
|
+
Adds a specified reaction (e.g., 'like', 'love') to a LinkedIn post or, optionally, to a specific comment. This function performs a POST request to create the reaction, differentiating it from `list_content_reactions` which only retrieves existing ones.
|
|
617
617
|
|
|
618
618
|
Args:
|
|
619
619
|
post_social_id: The social ID of the post or comment to react to.
|
|
@@ -784,7 +784,7 @@ class UnipileApp(APIApplication):
|
|
|
784
784
|
account_id: str,
|
|
785
785
|
) -> dict[str, Any]:
|
|
786
786
|
"""
|
|
787
|
-
Retrieves a specific LinkedIn user's profile using their public or internal ID
|
|
787
|
+
Retrieves a specific LinkedIn user's profile using their public or internal ID, authorized via the provided `account_id`. Unlike `retrieve_own_profile`, which fetches the authenticated user's details, this function targets and returns data for any specified third-party user profile on the platform.
|
|
788
788
|
|
|
789
789
|
Args:
|
|
790
790
|
identifier: Can be the provider's internal id OR the provider's public id of the requested user.For example, for https://www.linkedin.com/in/manojbajaj95/, the identifier is "manojbajaj95".
|
{universal_mcp_applications-0.1.16.dist-info → universal_mcp_applications-0.1.18.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: universal-mcp-applications
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.18
|
|
4
4
|
Summary: A Universal MCP Application: universal_mcp_applications
|
|
5
5
|
Project-URL: Homepage, https://github.com/universal-mcp/applications
|
|
6
6
|
Project-URL: Repository, https://github.com/universal-mcp/applications
|
{universal_mcp_applications-0.1.16.dist-info → universal_mcp_applications-0.1.18.dist-info}/RECORD
RENAMED
|
@@ -66,7 +66,7 @@ universal_mcp/applications/exa/__init__.py,sha256=Qv8Te8cOLhw9sFI5R7T_vnWsc84KIE
|
|
|
66
66
|
universal_mcp/applications/exa/app.py,sha256=zs7Ji24kxS6HvFeHB7mE4ElnPL02oWgBxx-dh0mwV6U,11993
|
|
67
67
|
universal_mcp/applications/falai/README.md,sha256=jiYqAZ8GF6UCLNW-c2kdWLRCVx82k1nYqfqnYhXUg48,1768
|
|
68
68
|
universal_mcp/applications/falai/__init__.py,sha256=dDEbnfW_FSTXVZjXrBKU5B-Hp2W-7KnnLSb9n276cdY,26
|
|
69
|
-
universal_mcp/applications/falai/app.py,sha256
|
|
69
|
+
universal_mcp/applications/falai/app.py,sha256=wKIajeMCMG9OYOQhb16-ObMC0kcY-cl6AgBiq2ma2U4,13981
|
|
70
70
|
universal_mcp/applications/figma/README.md,sha256=-pVipcK_itywZ_LoXutq-bX5ls5EKtNyLzsQs1lxxAU,5906
|
|
71
71
|
universal_mcp/applications/figma/__init__.py,sha256=eIW1-VV7H133xmLrAjx8bm0qNOxC_tdH39aWInKfAq0,26
|
|
72
72
|
universal_mcp/applications/figma/app.py,sha256=1gRA-ycluJq0qgy-JExRmYqlqgOvE0TSamjqFPFpdoM,47382
|
|
@@ -74,7 +74,7 @@ universal_mcp/applications/file_system/__init__.py,sha256=ZW4Iac5_Gho-FYaxIsnCs1
|
|
|
74
74
|
universal_mcp/applications/file_system/app.py,sha256=vcDo_S7Pt0G5q7R_00nLdbJ5GTG48_m346_7lqkPDQE,4261
|
|
75
75
|
universal_mcp/applications/firecrawl/README.md,sha256=BeUZ2IPckHC_JuxW6daai5qxfw2SbLjIsfh6PNcDbBU,1189
|
|
76
76
|
universal_mcp/applications/firecrawl/__init__.py,sha256=Sl2LuCKsNHoFf-3dGE31CYVGJkF_lJBvx34XVtZPr5I,30
|
|
77
|
-
universal_mcp/applications/firecrawl/app.py,sha256=
|
|
77
|
+
universal_mcp/applications/firecrawl/app.py,sha256=dh2G8y5-I4ITxV1vV916P4eaS0VqtMcnihOzHd1cYc4,22024
|
|
78
78
|
universal_mcp/applications/fireflies/README.md,sha256=l5iDCzF-diIh9gHptB8g4UzzWNLqUCq9rR164bhU7A4,1203
|
|
79
79
|
universal_mcp/applications/fireflies/__init__.py,sha256=SMEk3MeSk6aFzX8GX_NZwcjBvnEeTRQDlA1RZMrwKxA,30
|
|
80
80
|
universal_mcp/applications/fireflies/app.py,sha256=VREgLSsCI0AdUsMK4htajxVUDIKwBWeSeiex3a9jNwY,19022
|
|
@@ -91,31 +91,31 @@ universal_mcp/applications/ghost_content/__init__.py,sha256=FZpzgPwkJU54Y-7XfrR7
|
|
|
91
91
|
universal_mcp/applications/ghost_content/app.py,sha256=pZGrKNkWi1F9UTETKc76HL-Z_UgsOIw6k6remDJIwwM,24235
|
|
92
92
|
universal_mcp/applications/github/README.md,sha256=F6azpS6iwzr0dFQhhVBH8i8LgiJc9vnRzSixBNYuYgc,1388
|
|
93
93
|
universal_mcp/applications/github/__init__.py,sha256=3_T202KYSp3Wq9bV9spJBK1lf0NFPyGGoCsGSL_x8vk,27
|
|
94
|
-
universal_mcp/applications/github/app.py,sha256=
|
|
94
|
+
universal_mcp/applications/github/app.py,sha256=EmVF1xrM8dEa07Vpl_fpRUaKDLwrfYCbjMHmp50iTqs,20195
|
|
95
95
|
universal_mcp/applications/gong/README.md,sha256=mz9W81VYPwdwbQ2_Yz9TF5oP7lfgFRkn70xNHkZV534,6383
|
|
96
96
|
universal_mcp/applications/gong/__init__.py,sha256=Sev0qQ31JkJGnVwMdkV7DH6iAU8695dLxd1D2jMpcK8,25
|
|
97
97
|
universal_mcp/applications/gong/app.py,sha256=WRpa8tpgj9TiJwPzP5ZH7W4fiM8F59jlDSpn2McHsC4,100495
|
|
98
98
|
universal_mcp/applications/google_calendar/README.md,sha256=wmm3GZeKHRhaRA22r0GTSpYjzDUyGeWYopxafHRPrz0,1350
|
|
99
99
|
universal_mcp/applications/google_calendar/__init__.py,sha256=qxVxf_Q5lOdxXRHzmE78o1aYZoY1MRlmnR_lCGh7fe4,35
|
|
100
|
-
universal_mcp/applications/google_calendar/app.py,sha256=
|
|
100
|
+
universal_mcp/applications/google_calendar/app.py,sha256=FCdAbTRBM5St4NyUgmjiZWWv33LIre_quE-k_5FzF20,26167
|
|
101
101
|
universal_mcp/applications/google_docs/README.md,sha256=aL2EN1V3JIb4cHXefPFIFM0NjpcXtfJICCakc0jO5SM,1483
|
|
102
102
|
universal_mcp/applications/google_docs/__init__.py,sha256=U0pWagxnj0VD-AcKNd8eS0orzaMmlUOgvW9vkYBNH40,31
|
|
103
|
-
universal_mcp/applications/google_docs/app.py,sha256=
|
|
103
|
+
universal_mcp/applications/google_docs/app.py,sha256=xlnWvAs45FAbYJPU6wD8AqUGWqj7sUhIuUonyH2opKg,33575
|
|
104
104
|
universal_mcp/applications/google_drive/README.md,sha256=HNTQCqBU0wlmJEIgrlW1j3bKya5XtR7mvemcgPHJFD0,4089
|
|
105
105
|
universal_mcp/applications/google_drive/__init__.py,sha256=DTyed4ADcCmALSyPT8whjXoosPXl3m-i8JrilPJ3ijU,32
|
|
106
|
-
universal_mcp/applications/google_drive/app.py,sha256=
|
|
106
|
+
universal_mcp/applications/google_drive/app.py,sha256=u3eyZfV4Dkjj_lYe3vyaCgaPF-UNg8pH0EeLCtZDwmI,258417
|
|
107
107
|
universal_mcp/applications/google_gemini/README.md,sha256=o5cWenioUnNhn7L2fxwPLasBXzQ7mNmYp-aLLj9bHzY,2042
|
|
108
108
|
universal_mcp/applications/google_gemini/__init__.py,sha256=KZWdPU74VKBBabLpAcPNEPRPLFk8v2i0ULnT4wVHM9U,33
|
|
109
|
-
universal_mcp/applications/google_gemini/app.py,sha256=
|
|
109
|
+
universal_mcp/applications/google_gemini/app.py,sha256=pp2T1nuLUy3yAEOWssBssY3Oudj3YG8ofC757QRJQhY,8743
|
|
110
110
|
universal_mcp/applications/google_mail/README.md,sha256=TVLbil9-qjjp9kZziuWWhkiVNR1tf5XJ_q37xd6iUsg,2422
|
|
111
111
|
universal_mcp/applications/google_mail/__init__.py,sha256=_VpJPPBAJvPX3urxUD2_kiQmld91tkVFSvAcdt5XbmI,31
|
|
112
|
-
universal_mcp/applications/google_mail/app.py,sha256=
|
|
112
|
+
universal_mcp/applications/google_mail/app.py,sha256=iTUtsscSHbtiSE0UQXBRJHD_yy0fiHg6DQHqYmGcxNQ,60970
|
|
113
113
|
universal_mcp/applications/google_searchconsole/README.md,sha256=LIrDGFYmTHwRso014DNMyhOSgCOVybeTBejQpxeQIQ0,1129
|
|
114
114
|
universal_mcp/applications/google_searchconsole/__init__.py,sha256=PHuwQFk0_a-jbnAUNkAq3ODarxHIcu3z3AZXfwPhdbQ,40
|
|
115
|
-
universal_mcp/applications/google_searchconsole/app.py,sha256=
|
|
115
|
+
universal_mcp/applications/google_searchconsole/app.py,sha256=5fXhgYrFrKs3Mm9IZdCW4ylq2cj8BB1DxWp3a1oMblY,14272
|
|
116
116
|
universal_mcp/applications/google_sheet/README.md,sha256=79WnJ8wP52CV_6IENfXjb0sZm5vGsx2lbSvJBbNT0qA,3838
|
|
117
117
|
universal_mcp/applications/google_sheet/__init__.py,sha256=sl1VQKQMlYuzZGHUIyVsFvnar6APaIFb4Y_nl7TA0us,32
|
|
118
|
-
universal_mcp/applications/google_sheet/app.py,sha256=
|
|
118
|
+
universal_mcp/applications/google_sheet/app.py,sha256=sGnypqRgmm9_GdwYVpgZ8RNXSN4qAKGlBCOKAmbURGY,88425
|
|
119
119
|
universal_mcp/applications/google_sheet/helper.py,sha256=rC_2I4oKfd-rpj3UIWXGH4pZlMX1vI9kixryxBFymSY,11996
|
|
120
120
|
universal_mcp/applications/hashnode/README.md,sha256=O_k8h3w3tVwigqRMSiYCl2XchoBM_p66sPLGFcexNQo,866
|
|
121
121
|
universal_mcp/applications/hashnode/__init__.py,sha256=ty459WmLiNoGM4XZAKWNASp-0MCMBV15J3LstDbZWPw,29
|
|
@@ -137,7 +137,7 @@ universal_mcp/applications/klaviyo/__init__.py,sha256=YS2GhW7my_I1tfyLlxlkeTFmlz
|
|
|
137
137
|
universal_mcp/applications/klaviyo/app.py,sha256=xHQxEZFVIWPCBmL6YoYxuVREibwPRH21izw0psmOzFc,423692
|
|
138
138
|
universal_mcp/applications/linkedin/README.md,sha256=ybHYEJ9rQ6MxNvh89Nd553iG1UNt4skz6yJoMPrx5OI,415
|
|
139
139
|
universal_mcp/applications/linkedin/__init__.py,sha256=Yj-713vb4ZYykIlXlwOkKkIXIOB3opCW8wvp_CCqlKk,29
|
|
140
|
-
universal_mcp/applications/linkedin/app.py,sha256=
|
|
140
|
+
universal_mcp/applications/linkedin/app.py,sha256=QZd24THXCZcuxhiTmXUulott9WqXmcA5foGnHyIXtR4,11334
|
|
141
141
|
universal_mcp/applications/mailchimp/README.md,sha256=2eLln_2S4xJoNV4Fqe2Oy4Xe6QO3SUp-wAxsugXR8v0,33793
|
|
142
142
|
universal_mcp/applications/mailchimp/__init__.py,sha256=wmXVl-NJyTNkFT5db29OZmeiLWAGu9jXwdZC5o2jZBw,30
|
|
143
143
|
universal_mcp/applications/mailchimp/app.py,sha256=_a6iByjDK1SuM3UoT5lTokptdEryUzrS8JsYNLCTwi4,466723
|
|
@@ -149,7 +149,7 @@ universal_mcp/applications/miro/__init__.py,sha256=60-PalZbgF6QF506qaaGRkMNNzkiy
|
|
|
149
149
|
universal_mcp/applications/miro/app.py,sha256=Jvghd4TRBUubHaG-IEniSVdd7LwlrULpUEepjWzHC7I,198132
|
|
150
150
|
universal_mcp/applications/ms_teams/README.md,sha256=0jpMpO5o7mB2qUk45FwR5jsUbGqg8w7V6s3SMIyy9G0,1853
|
|
151
151
|
universal_mcp/applications/ms_teams/__init__.py,sha256=mSSsERDFHWbg1621pCBGn_DYVU-s4YOKOvWLzDflo9Y,28
|
|
152
|
-
universal_mcp/applications/ms_teams/app.py,sha256=
|
|
152
|
+
universal_mcp/applications/ms_teams/app.py,sha256=kOA0K68kdtayJPUqBYwht6kHM0s2ij_0rkqa3xUeBS0,83526
|
|
153
153
|
universal_mcp/applications/neon/README.md,sha256=O2JPvjJirRi8GNcLGAk-p0qa_KfV8ClTHvXk_LbT_dA,7132
|
|
154
154
|
universal_mcp/applications/neon/__init__.py,sha256=9QeNV4cvMyVDE3jlxiUYqECHS9EdN8tkPk01udScaVI,25
|
|
155
155
|
universal_mcp/applications/neon/app.py,sha256=ISwBIKfZn-xnCICrpQZI_BGz_6dhlPcV4EdOFn-My-8,83512
|
|
@@ -161,7 +161,7 @@ universal_mcp/applications/openai/__init__.py,sha256=7h2xDZdb1pRh7ZDLtFK9BNDEbRH
|
|
|
161
161
|
universal_mcp/applications/openai/app.py,sha256=77dS3FdbeSkLJx5NkAuzd87QdphKh6ZjGjvN8WjWtr4,34418
|
|
162
162
|
universal_mcp/applications/outlook/README.md,sha256=h6jUIYyO20YJaEJ34pmov7ywhfnwP9qLQC9fwbpP9A4,1603
|
|
163
163
|
universal_mcp/applications/outlook/__init__.py,sha256=yExFpo0apWqcpP7l4qCjAYwMyzomUaEeNDhY7Gi-We0,28
|
|
164
|
-
universal_mcp/applications/outlook/app.py,sha256=
|
|
164
|
+
universal_mcp/applications/outlook/app.py,sha256=FRDr5svowc-uY3azs9VRxNoD_r50FD3K_eooBLIMmTk,19816
|
|
165
165
|
universal_mcp/applications/perplexity/README.md,sha256=mUXKJHhBgK6H8oyjhlrxcsfuvDrOniIceTBmcR_Oeao,335
|
|
166
166
|
universal_mcp/applications/perplexity/__init__.py,sha256=f4uz8qlw-uek6AlyWxoWxukubaHb6YV4riTcvQhfvO0,31
|
|
167
167
|
universal_mcp/applications/perplexity/app.py,sha256=JgzBdviTyXtUrYePJJbmUcKDuTWJJpvUphT0a5OYVKs,2847
|
|
@@ -173,7 +173,7 @@ universal_mcp/applications/posthog/__init__.py,sha256=2j8vH09Xqz51BlfNehaEvY2A2L
|
|
|
173
173
|
universal_mcp/applications/posthog/app.py,sha256=-T0hOSxPT3qQEVG8IrRY0MVi0YI8yHHeKPgl5jRexGY,275182
|
|
174
174
|
universal_mcp/applications/reddit/README.md,sha256=3krLCogha_GekeqACyIx8G_mHmOmQbcyZJn8ZUHQtjE,8594
|
|
175
175
|
universal_mcp/applications/reddit/__init__.py,sha256=JHA_BMVnuQyoDMbQt5dRNxKPrAxyZZL6zzQyNbvyjHs,27
|
|
176
|
-
universal_mcp/applications/reddit/app.py,sha256=
|
|
176
|
+
universal_mcp/applications/reddit/app.py,sha256=NZWx4cYcCOKzonIr9VrYsq7gYmEk-56QBa2ICG0hGGY,36394
|
|
177
177
|
universal_mcp/applications/replicate/README.md,sha256=1N9UgpeU1G_Yt6pBIFuty1ii6yJe2hLbfDJUKFPrYk0,1288
|
|
178
178
|
universal_mcp/applications/replicate/__init__.py,sha256=W3thUM5OFDKregi9E4EjzrcLY4ya_ZLMQKXAF2fiYV4,30
|
|
179
179
|
universal_mcp/applications/replicate/app.py,sha256=QIHReOEnF3QUkSi0DME1jrBn24WC8r2hVQHtr7SryEo,21836
|
|
@@ -188,7 +188,7 @@ universal_mcp/applications/rocketlane/__init__.py,sha256=jl3PjnTvPdjnbFXJgLywSlE
|
|
|
188
188
|
universal_mcp/applications/rocketlane/app.py,sha256=Re5-OoUWIIxL_ZJZ_RpEqz82hymgAWtdcOSJtJFzzs0,240690
|
|
189
189
|
universal_mcp/applications/scraper/README.md,sha256=ys9f2dRHGsnFkauAuGdBo3_Z_51PRn2cqGlnEv8kjPI,590
|
|
190
190
|
universal_mcp/applications/scraper/__init__.py,sha256=RnkyFDeNR1tOsY_PskHdv4C8AYRbcjMt7KyYQWiGGD8,27
|
|
191
|
-
universal_mcp/applications/scraper/app.py,sha256=
|
|
191
|
+
universal_mcp/applications/scraper/app.py,sha256=DPdsmsWuYWXccaUe5_lurHhVeVs1DHbUP8JvIDeWJys,7255
|
|
192
192
|
universal_mcp/applications/semanticscholar/README.md,sha256=JpLY_698pvstgoNfQ5Go8C8ehQ-o68uFDX5kr86upK0,2834
|
|
193
193
|
universal_mcp/applications/semanticscholar/__init__.py,sha256=eR36chrc0pbBsSE1GadvmQH0OmtKnSC91xbE7HcDPf0,36
|
|
194
194
|
universal_mcp/applications/semanticscholar/app.py,sha256=OHTFkR-IwRU5Rvb1bEu7XmRHikht3hEgZxszLQu6kFI,22234
|
|
@@ -206,7 +206,7 @@ universal_mcp/applications/serpapi/__init__.py,sha256=1lErMm8HVSYiNEnDDjQr8_5h-s
|
|
|
206
206
|
universal_mcp/applications/serpapi/app.py,sha256=ki3yzVxwrYQU9JQI6gblLNBaq0pwiBy-JwR85nTyqRo,13518
|
|
207
207
|
universal_mcp/applications/sharepoint/README.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
208
208
|
universal_mcp/applications/sharepoint/__init__.py,sha256=Aj4fG4SQCzpbRMovrq5McIvKCAzl03FtROh7SUQ0Unk,31
|
|
209
|
-
universal_mcp/applications/sharepoint/app.py,sha256=
|
|
209
|
+
universal_mcp/applications/sharepoint/app.py,sha256=zBxzTWn1OIDkYso3bGHiS0CncTwg8mixHlzHE4N_K28,9488
|
|
210
210
|
universal_mcp/applications/shopify/README.md,sha256=vXUNUmcR70PYG9Ojqlg8m1w3M5AXI10CZ-Or2oGrbuU,48415
|
|
211
211
|
universal_mcp/applications/shopify/__init__.py,sha256=_TyHBCgryXtqpUTngnUnPmJmnTzQvi1jNyi4VIlsoXQ,28
|
|
212
212
|
universal_mcp/applications/shopify/app.py,sha256=MFEOqWcL-rtJf5ccyxkKVLPHf0Q6fmEmFIRDYKQXgDI,615058
|
|
@@ -249,7 +249,7 @@ universal_mcp/applications/twitter/api_segments/usage_api.py,sha256=aBhjTzYUN16s
|
|
|
249
249
|
universal_mcp/applications/twitter/api_segments/users_api.py,sha256=aypLs5_66TRtliSi2TjrQO9l6NuJa2LZn3Ywgwt8hEk,82349
|
|
250
250
|
universal_mcp/applications/unipile/README.md,sha256=fe4fT2amFnX8wtU4xIy2x5nZg3WKG9S7FyGoc24mmxU,1604
|
|
251
251
|
universal_mcp/applications/unipile/__init__.py,sha256=0UZVOiYo_dDXbvTmtHrZ_fgvrbpasjWV17EEm4pZq9E,28
|
|
252
|
-
universal_mcp/applications/unipile/app.py,sha256=
|
|
252
|
+
universal_mcp/applications/unipile/app.py,sha256=Ssf7a3GijATbgPAGOeZgEvtCxlQd9nRZ750skEO3szE,33483
|
|
253
253
|
universal_mcp/applications/whatsapp/README.md,sha256=eYXIHHpsNIhc2xBLyzStoATXnlvnOZHAxGsBoLC1vd0,1364
|
|
254
254
|
universal_mcp/applications/whatsapp/__init__.py,sha256=miHfSBpu5lx226T8dMbvOw_5H6MJCWOKVK_WbqMma-8,29
|
|
255
255
|
universal_mcp/applications/whatsapp/app.py,sha256=CDNTjoPh8j5e4X_i22a0UtCHKj9VsocpNvqcDXyarsk,23520
|
|
@@ -267,7 +267,7 @@ universal_mcp/applications/youtube/app.py,sha256=GxTtXbwda044bIqmzxIGX6x3WNejHx0
|
|
|
267
267
|
universal_mcp/applications/zenquotes/README.md,sha256=x1mZHjNKD4WOgsIhedcbbaR1nvbt794GSrKud1tSLD0,296
|
|
268
268
|
universal_mcp/applications/zenquotes/__init__.py,sha256=IkASLYaZiHJXlkGwEMk1HgIq5GwEZp5GhAIiJyjBd3g,30
|
|
269
269
|
universal_mcp/applications/zenquotes/app.py,sha256=S88JEoVFsyqow-56zcYPgRzhcz59AG_L_RdTFqtSwdA,1323
|
|
270
|
-
universal_mcp_applications-0.1.
|
|
271
|
-
universal_mcp_applications-0.1.
|
|
272
|
-
universal_mcp_applications-0.1.
|
|
273
|
-
universal_mcp_applications-0.1.
|
|
270
|
+
universal_mcp_applications-0.1.18.dist-info/METADATA,sha256=j6bc4EjuAk23ybKeAk-uLpWfKznVFLbVVLplFYahcGw,4024
|
|
271
|
+
universal_mcp_applications-0.1.18.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
272
|
+
universal_mcp_applications-0.1.18.dist-info/licenses/LICENSE,sha256=NweDZVPslBAZFzlgByF158b85GR0f5_tLQgq1NS48To,1063
|
|
273
|
+
universal_mcp_applications-0.1.18.dist-info/RECORD,,
|
{universal_mcp_applications-0.1.16.dist-info → universal_mcp_applications-0.1.18.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|