universal-mcp-applications 0.1.20__py3-none-any.whl → 0.1.21__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.

@@ -174,6 +174,223 @@ class ScraperApp(APIApplication):
174
174
  limit=limit,
175
175
  )
176
176
 
177
+ def linkedin_people_search(
178
+ self,
179
+ cursor: Optional[str] = None,
180
+ limit: Optional[int] = None,
181
+ keywords: Optional[str] = None,
182
+ last_viewed_at: Optional[int] = None,
183
+ saved_search_id: Optional[str] = None,
184
+ recent_search_id: Optional[str] = None,
185
+ location: Optional[dict[str, Any]] = None,
186
+ location_by_postal_code: Optional[dict[str, Any]] = None,
187
+ industry: Optional[dict[str, Any]] = None,
188
+ first_name: Optional[str] = None,
189
+ last_name: Optional[str] = None,
190
+ tenure: Optional[list[dict[str, Any]]] = None,
191
+ groups: Optional[list[str]] = None,
192
+ school: Optional[dict[str, Any]] = None,
193
+ profile_language: Optional[list[str]] = None,
194
+ company: Optional[dict[str, Any]] = None,
195
+ company_headcount: Optional[list[dict[str, Any]]] = None,
196
+ company_type: Optional[list[str]] = None,
197
+ company_location: Optional[dict[str, Any]] = None,
198
+ tenure_at_company: Optional[list[dict[str, Any]]] = None,
199
+ past_company: Optional[dict[str, Any]] = None,
200
+ function: Optional[dict[str, Any]] = None,
201
+ role: Optional[dict[str, Any]] = None,
202
+ tenure_at_role: Optional[list[dict[str, Any]]] = None,
203
+ seniority: Optional[dict[str, Any]] = None,
204
+ past_role: Optional[dict[str, Any]] = None,
205
+ following_your_company: Optional[bool] = None,
206
+ viewed_your_profile_recently: Optional[bool] = None,
207
+ network_distance: Optional[list[str]] = None,
208
+ connections_of: Optional[list[str]] = None,
209
+ past_colleague: Optional[bool] = None,
210
+ shared_experiences: Optional[bool] = None,
211
+ changed_jobs: Optional[bool] = None,
212
+ posted_on_linkedin: Optional[bool] = None,
213
+ mentionned_in_news: Optional[bool] = None,
214
+ persona: Optional[list[str]] = None,
215
+ account_lists: Optional[dict[str, Any]] = None,
216
+ lead_lists: Optional[dict[str, Any]] = None,
217
+ viewed_profile_recently: Optional[bool] = None,
218
+ messaged_recently: Optional[bool] = None,
219
+ include_saved_leads: Optional[bool] = None,
220
+ include_saved_accounts: Optional[bool] = None,
221
+ ) -> dict[str, Any]:
222
+ """
223
+ Performs a comprehensive LinkedIn Sales Navigator people search with advanced targeting options.
224
+ This function provides access to LinkedIn's Sales Navigator search capabilities for finding people
225
+ with precise filters including experience, company details, education, and relationship criteria.
226
+
227
+ Args:
228
+ cursor: Pagination cursor for the next page of entries.
229
+ limit: Number of items to return.
230
+ keywords: LinkedIn native filter: KEYWORDS.
231
+ last_viewed_at: Unix timestamp for saved search filtering.
232
+ saved_search_id: ID of saved search (overrides other parameters).
233
+ recent_search_id: ID of recent search (overrides other parameters).
234
+ location: LinkedIn native filter: GEOGRAPHY. Example: {"include": ["San Francisco Bay Area", "New York City Area"]}
235
+ location_by_postal_code: Location filter by postal code. Example: {"postal_code": "94105", "radius": "25"}
236
+ industry: LinkedIn native filter: INDUSTRY. Example: {"include": ["Information Technology and Services", "Financial Services"]}
237
+ first_name: LinkedIn native filter: FIRST NAME. Example: "John"
238
+ last_name: LinkedIn native filter: LAST NAME. Example: "Smith"
239
+ tenure: LinkedIn native filter: YEARS OF EXPERIENCE. Example: [{"min": 5, "max": 10}]
240
+ groups: LinkedIn native filter: GROUPS. Example: ["group_id_1", "group_id_2"]
241
+ school: LinkedIn native filter: SCHOOL. Example: {"include": ["Stanford University", "Harvard University"]}
242
+ profile_language: ISO 639-1 language codes, LinkedIn native filter: PROFILE LANGUAGE. Example: ["en", "es"]
243
+ company: LinkedIn native filter: CURRENT COMPANY. Example: {"include": ["Google", "Microsoft", "Apple"]}
244
+ company_headcount: LinkedIn native filter: COMPANY HEADCOUNT. Example: [{"min": 100, "max": 1000}]
245
+ company_type: LinkedIn native filter: COMPANY TYPE. Example: ["Public Company", "Privately Held"]
246
+ company_location: LinkedIn native filter: COMPANY HEADQUARTERS LOCATION. Example: {"include": ["San Francisco", "Seattle"]}
247
+ tenure_at_company: LinkedIn native filter: YEARS IN CURRENT COMPANY. Example: [{"min": 2, "max": 5}]
248
+ past_company: LinkedIn native filter: PAST COMPANY. Example: {"include": ["Facebook", "Amazon"]}
249
+ function: LinkedIn native filter: FUNCTION. Example: {"include": ["Engineering", "Sales", "Marketing"]}
250
+ role: LinkedIn native filter: CURRENT JOB TITLE. Example: {"include": ["Software Engineer", "Product Manager"]}
251
+ tenure_at_role: LinkedIn native filter: YEARS IN CURRENT POSITION. Example: [{"min": 1, "max": 3}]
252
+ seniority: LinkedIn native filter: SENIORITY LEVEL. Example: {"include": ["Senior", "Director", "VP"]}
253
+ past_role: LinkedIn native filter: PAST JOB TITLE. Example: {"include": ["Senior Developer", "Team Lead"]}
254
+ following_your_company: LinkedIn native filter: FOLLOWING YOUR COMPANY. Example: True
255
+ viewed_your_profile_recently: LinkedIn native filter: VIEWED YOUR PROFILE RECENTLY. Example: True
256
+ network_distance: First, second, third+ degree or GROUP, LinkedIn native filter: CONNECTION. Example: ["1st", "2nd"]
257
+ connections_of: LinkedIn native filter: CONNECTIONS OF. Example: ["person_id_1", "person_id_2"]
258
+ past_colleague: LinkedIn native filter: PAST COLLEAGUE. Example: True
259
+ shared_experiences: LinkedIn native filter: SHARED EXPERIENCES. Example: True
260
+ changed_jobs: LinkedIn native filter: CHANGED JOBS. Example: True
261
+ posted_on_linkedin: LinkedIn native filter: POSTED ON LINKEDIN. Example: True
262
+ mentionned_in_news: LinkedIn native filter: MENTIONNED IN NEWS. Example: True
263
+ persona: LinkedIn native filter: PERSONA. Example: ["persona_id_1", "persona_id_2"]
264
+ account_lists: LinkedIn native filter: ACCOUNT LISTS. Example: {"include": ["list_id_1"]}
265
+ lead_lists: LinkedIn native filter: LEAD LISTS. Example: {"include": ["lead_list_id_1"]}
266
+ viewed_profile_recently: LinkedIn native filter: PEOPLE YOU INTERACTED WITH / VIEWED PROFILE. Example: True
267
+ messaged_recently: LinkedIn native filter: PEOPLE YOU INTERACTED WITH / MESSAGED. Example: True
268
+ include_saved_leads: LinkedIn native filter: SAVED LEADS AND ACCOUNTS / ALL MY SAVED LEADS. Example: True
269
+ include_saved_accounts: LinkedIn native filter: SAVED LEADS AND ACCOUNTS / ALL MY SAVED ACCOUNTS. Example: True
270
+
271
+ Returns:
272
+ A dictionary containing search results and pagination details.
273
+
274
+ Raises:
275
+ httpx.HTTPError: If the API request fails.
276
+
277
+ Tags:
278
+ linkedin, sales_navigator, people, search, advanced, scraper, api, important
279
+ """
280
+ return self._unipile_app.people_search(
281
+ account_id=self.account_id,
282
+ cursor=cursor,
283
+ limit=limit,
284
+ keywords=keywords,
285
+ last_viewed_at=last_viewed_at,
286
+ saved_search_id=saved_search_id,
287
+ recent_search_id=recent_search_id,
288
+ location=location,
289
+ location_by_postal_code=location_by_postal_code,
290
+ industry=industry,
291
+ first_name=first_name,
292
+ last_name=last_name,
293
+ tenure=tenure,
294
+ groups=groups,
295
+ school=school,
296
+ profile_language=profile_language,
297
+ company=company,
298
+ company_headcount=company_headcount,
299
+ company_type=company_type,
300
+ company_location=company_location,
301
+ tenure_at_company=tenure_at_company,
302
+ past_company=past_company,
303
+ function=function,
304
+ role=role,
305
+ tenure_at_role=tenure_at_role,
306
+ seniority=seniority,
307
+ past_role=past_role,
308
+ following_your_company=following_your_company,
309
+ viewed_your_profile_recently=viewed_your_profile_recently,
310
+ network_distance=network_distance,
311
+ connections_of=connections_of,
312
+ past_colleague=past_colleague,
313
+ shared_experiences=shared_experiences,
314
+ changed_jobs=changed_jobs,
315
+ posted_on_linkedin=posted_on_linkedin,
316
+ mentionned_in_news=mentionned_in_news,
317
+ persona=persona,
318
+ account_lists=account_lists,
319
+ lead_lists=lead_lists,
320
+ viewed_profile_recently=viewed_profile_recently,
321
+ messaged_recently=messaged_recently,
322
+ include_saved_leads=include_saved_leads,
323
+ include_saved_accounts=include_saved_accounts,
324
+ )
325
+
326
+ def linkedin_company_search(
327
+ self,
328
+ cursor: Optional[str] = None,
329
+ limit: Optional[int] = None,
330
+ keywords: Optional[str] = None,
331
+ last_viewed_at: Optional[int] = None,
332
+ saved_search_id: Optional[str] = None,
333
+ recent_search_id: Optional[str] = None,
334
+ location: Optional[dict[str, Any]] = None,
335
+ location_by_postal_code: Optional[dict[str, Any]] = None,
336
+ industry: Optional[dict[str, Any]] = None,
337
+ company_headcount: Optional[list[dict[str, Any]]] = None,
338
+ company_type: Optional[list[str]] = None,
339
+ company_location: Optional[dict[str, Any]] = None,
340
+ following_your_company: Optional[bool] = None,
341
+ account_lists: Optional[dict[str, Any]] = None,
342
+ include_saved_accounts: Optional[bool] = None,
343
+ ) -> dict[str, Any]:
344
+ """
345
+ Performs a comprehensive LinkedIn Sales Navigator company search with advanced targeting options.
346
+ This function provides access to LinkedIn's Sales Navigator search capabilities for finding companies
347
+ with precise filters including size, location, industry, and relationship criteria.
348
+
349
+ Args:
350
+ cursor: Pagination cursor for the next page of entries.
351
+ limit: Number of items to return.
352
+ keywords: LinkedIn native filter: KEYWORDS. Example: "fintech startup"
353
+ last_viewed_at: Unix timestamp for saved search filtering.
354
+ saved_search_id: ID of saved search (overrides other parameters).
355
+ recent_search_id: ID of recent search (overrides other parameters).
356
+ location: LinkedIn native filter: GEOGRAPHY. Example: {"include": ["San Francisco Bay Area", "New York City Area"]}
357
+ location_by_postal_code: Location filter by postal code. Example: {"postal_code": "94105", "radius": "25"}
358
+ industry: LinkedIn native filter: INDUSTRY. Example: {"include": ["Information Technology and Services", "Financial Services"]}
359
+ company_headcount: LinkedIn native filter: COMPANY HEADCOUNT. Example: [{"min": 10, "max": 100}]
360
+ company_type: LinkedIn native filter: COMPANY TYPE. Example: ["Public Company", "Privately Held", "Startup"]
361
+ company_location: LinkedIn native filter: COMPANY HEADQUARTERS LOCATION. Example: {"include": ["San Francisco", "Seattle", "Austin"]}
362
+ following_your_company: LinkedIn native filter: FOLLOWING YOUR COMPANY. Example: True
363
+ account_lists: LinkedIn native filter: ACCOUNT LISTS. Example: {"include": ["account_list_id_1"]}
364
+ include_saved_accounts: LinkedIn native filter: SAVED LEADS AND ACCOUNTS / ALL MY SAVED ACCOUNTS. Example: True
365
+
366
+ Returns:
367
+ A dictionary containing search results and pagination details.
368
+
369
+ Raises:
370
+ httpx.HTTPError: If the API request fails.
371
+
372
+ Tags:
373
+ linkedin, sales_navigator, companies, search, advanced, scraper, api, important
374
+ """
375
+ return self._unipile_app.company_search(
376
+ account_id=self.account_id,
377
+ cursor=cursor,
378
+ limit=limit,
379
+ keywords=keywords,
380
+ last_viewed_at=last_viewed_at,
381
+ saved_search_id=saved_search_id,
382
+ recent_search_id=recent_search_id,
383
+ location=location,
384
+ location_by_postal_code=location_by_postal_code,
385
+ industry=industry,
386
+ company_headcount=company_headcount,
387
+ company_type=company_type,
388
+ company_location=company_location,
389
+ following_your_company=following_your_company,
390
+ account_lists=account_lists,
391
+ include_saved_accounts=include_saved_accounts,
392
+ )
393
+
177
394
  def list_tools(self):
178
395
  """
179
396
  Returns a list of available tools/functions in this application.
@@ -186,4 +403,6 @@ class ScraperApp(APIApplication):
186
403
  self.linkedin_list_profile_posts,
187
404
  self.linkedin_retrieve_profile,
188
405
  self.linkedin_list_post_comments,
406
+ self.linkedin_people_search,
407
+ self.linkedin_company_search,
189
408
  ]
@@ -778,6 +778,261 @@ class UnipileApp(APIApplication):
778
778
  response = self._post(url, params=params, data=payload)
779
779
  return self._handle_response(response)
780
780
 
781
+ def people_search(
782
+ self,
783
+ account_id: str,
784
+ cursor: str | None = None,
785
+ limit: int | None = None,
786
+ keywords: str | None = None,
787
+ last_viewed_at: int | None = None,
788
+ saved_search_id: str | None = None,
789
+ recent_search_id: str | None = None,
790
+ location: dict[str, Any] | None = None,
791
+ location_by_postal_code: dict[str, Any] | None = None,
792
+ industry: dict[str, Any] | None = None,
793
+ first_name: str | None = None,
794
+ last_name: str | None = None,
795
+ tenure: list[dict[str, Any]] | None = None,
796
+ groups: list[str] | None = None,
797
+ school: dict[str, Any] | None = None,
798
+ profile_language: list[str] | None = None,
799
+ company: dict[str, Any] | None = None,
800
+ company_headcount: list[dict[str, Any]] | None = None,
801
+ company_type: list[str] | None = None,
802
+ company_location: dict[str, Any] | None = None,
803
+ tenure_at_company: list[dict[str, Any]] | None = None,
804
+ past_company: dict[str, Any] | None = None,
805
+ function: dict[str, Any] | None = None,
806
+ role: dict[str, Any] | None = None,
807
+ tenure_at_role: list[dict[str, Any]] | None = None,
808
+ seniority: dict[str, Any] | None = None,
809
+ past_role: dict[str, Any] | None = None,
810
+ following_your_company: bool | None = None,
811
+ viewed_your_profile_recently: bool | None = None,
812
+ network_distance: list[str] | None = None,
813
+ connections_of: list[str] | None = None,
814
+ past_colleague: bool | None = None,
815
+ shared_experiences: bool | None = None,
816
+ changed_jobs: bool | None = None,
817
+ posted_on_linkedin: bool | None = None,
818
+ mentionned_in_news: bool | None = None,
819
+ persona: list[str] | None = None,
820
+ account_lists: dict[str, Any] | None = None,
821
+ lead_lists: dict[str, Any] | None = None,
822
+ viewed_profile_recently: bool | None = None,
823
+ messaged_recently: bool | None = None,
824
+ include_saved_leads: bool | None = None,
825
+ include_saved_accounts: bool | None = None,
826
+ ) -> dict[str, Any]:
827
+ """
828
+ Performs a comprehensive LinkedIn Sales Navigator people search with all available parameters.
829
+ This function provides access to LinkedIn's advanced Sales Navigator search capabilities
830
+ for finding people with precise targeting options.
831
+
832
+ Args:
833
+ account_id: The ID of the Unipile account to perform the search from (REQUIRED).
834
+ cursor: Pagination cursor for the next page of entries.
835
+ limit: Number of items to return.
836
+ keywords: LinkedIn native filter: KEYWORDS.
837
+ last_viewed_at: Unix timestamp for saved search filtering.
838
+ saved_search_id: ID of saved search (overrides other parameters).
839
+ recent_search_id: ID of recent search (overrides other parameters).
840
+ location: LinkedIn native filter: GEOGRAPHY.
841
+ location_by_postal_code: Location filter by postal code.
842
+ industry: LinkedIn native filter: INDUSTRY.
843
+ first_name: LinkedIn native filter: FIRST NAME.
844
+ last_name: LinkedIn native filter: LAST NAME.
845
+ tenure: LinkedIn native filter: YEARS OF EXPERIENCE.
846
+ groups: LinkedIn native filter: GROUPS.
847
+ school: LinkedIn native filter: SCHOOL.
848
+ profile_language: ISO 639-1 language codes, LinkedIn native filter: PROFILE LANGUAGE.
849
+ company: LinkedIn native filter: CURRENT COMPANY.
850
+ company_headcount: LinkedIn native filter: COMPANY HEADCOUNT.
851
+ company_type: LinkedIn native filter: COMPANY TYPE.
852
+ company_location: LinkedIn native filter: COMPANY HEADQUARTERS LOCATION.
853
+ tenure_at_company: LinkedIn native filter: YEARS IN CURRENT COMPANY.
854
+ past_company: LinkedIn native filter: PAST COMPANY.
855
+ function: LinkedIn native filter: FUNCTION.
856
+ role: LinkedIn native filter: CURRENT JOB TITLE.
857
+ tenure_at_role: LinkedIn native filter: YEARS IN CURRENT POSITION.
858
+ seniority: LinkedIn native filter: SENIORITY LEVEL.
859
+ past_role: LinkedIn native filter: PAST JOB TITLE.
860
+ following_your_company: LinkedIn native filter: FOLLOWING YOUR COMPANY.
861
+ viewed_your_profile_recently: LinkedIn native filter: VIEWED YOUR PROFILE RECENTLY.
862
+ network_distance: First, second, third+ degree or GROUP, LinkedIn native filter: CONNECTION.
863
+ connections_of: LinkedIn native filter: CONNECTIONS OF.
864
+ past_colleague: LinkedIn native filter: PAST COLLEAGUE.
865
+ shared_experiences: LinkedIn native filter: SHARED EXPERIENCES.
866
+ changed_jobs: LinkedIn native filter: CHANGED JOBS.
867
+ posted_on_linkedin: LinkedIn native filter: POSTED ON LINKEDIN.
868
+ mentionned_in_news: LinkedIn native filter: MENTIONNED IN NEWS.
869
+ persona: LinkedIn native filter: PERSONA.
870
+ account_lists: LinkedIn native filter: ACCOUNT LISTS.
871
+ lead_lists: LinkedIn native filter: LEAD LISTS.
872
+ viewed_profile_recently: LinkedIn native filter: PEOPLE YOU INTERACTED WITH / VIEWED PROFILE.
873
+ messaged_recently: LinkedIn native filter: PEOPLE YOU INTERACTED WITH / MESSAGED.
874
+ include_saved_leads: LinkedIn native filter: SAVED LEADS AND ACCOUNTS / ALL MY SAVED LEADS.
875
+ include_saved_accounts: LinkedIn native filter: SAVED LEADS AND ACCOUNTS / ALL MY SAVED ACCOUNTS.
876
+
877
+ Returns:
878
+ A dictionary containing search results and pagination details.
879
+
880
+ Raises:
881
+ httpx.HTTPError: If the API request fails.
882
+
883
+ Tags:
884
+ linkedin, sales_navigator, people, search, advanced, api, important
885
+ """
886
+ url = f"{self.base_url}/api/v1/linkedin/search"
887
+
888
+ params: dict[str, Any] = {"account_id": account_id}
889
+ if cursor:
890
+ params["cursor"] = cursor
891
+ if limit is not None:
892
+ params["limit"] = limit
893
+
894
+ payload: dict[str, Any] = {
895
+ "api": "sales_navigator",
896
+ "category": "people"
897
+ }
898
+
899
+ # Add all the Sales Navigator specific parameters
900
+ sn_params = {
901
+ "keywords": keywords,
902
+ "last_viewed_at": last_viewed_at,
903
+ "saved_search_id": saved_search_id,
904
+ "recent_search_id": recent_search_id,
905
+ "location": location,
906
+ "location_by_postal_code": location_by_postal_code,
907
+ "industry": industry,
908
+ "first_name": first_name,
909
+ "last_name": last_name,
910
+ "tenure": tenure,
911
+ "groups": groups,
912
+ "school": school,
913
+ "profile_language": profile_language,
914
+ "company": company,
915
+ "company_headcount": company_headcount,
916
+ "company_type": company_type,
917
+ "company_location": company_location,
918
+ "tenure_at_company": tenure_at_company,
919
+ "past_company": past_company,
920
+ "function": function,
921
+ "role": role,
922
+ "tenure_at_role": tenure_at_role,
923
+ "seniority": seniority,
924
+ "past_role": past_role,
925
+ "following_your_company": following_your_company,
926
+ "viewed_your_profile_recently": viewed_your_profile_recently,
927
+ "network_distance": network_distance,
928
+ "connections_of": connections_of,
929
+ "past_colleague": past_colleague,
930
+ "shared_experiences": shared_experiences,
931
+ "changed_jobs": changed_jobs,
932
+ "posted_on_linkedin": posted_on_linkedin,
933
+ "mentionned_in_news": mentionned_in_news,
934
+ "persona": persona,
935
+ "account_lists": account_lists,
936
+ "lead_lists": lead_lists,
937
+ "viewed_profile_recently": viewed_profile_recently,
938
+ "messaged_recently": messaged_recently,
939
+ "include_saved_leads": include_saved_leads,
940
+ "include_saved_accounts": include_saved_accounts,
941
+ }
942
+
943
+ # Only add parameters that are not None
944
+ payload.update({k: v for k, v in sn_params.items() if v is not None})
945
+
946
+ response = self._post(url, params=params, data=payload)
947
+ return self._handle_response(response)
948
+
949
+ def company_search(
950
+ self,
951
+ account_id: str,
952
+ cursor: str | None = None,
953
+ limit: int | None = None,
954
+ keywords: str | None = None,
955
+ last_viewed_at: int | None = None,
956
+ saved_search_id: str | None = None,
957
+ recent_search_id: str | None = None,
958
+ location: dict[str, Any] | None = None,
959
+ location_by_postal_code: dict[str, Any] | None = None,
960
+ industry: dict[str, Any] | None = None,
961
+ company_headcount: list[dict[str, Any]] | None = None,
962
+ company_type: list[str] | None = None,
963
+ company_location: dict[str, Any] | None = None,
964
+ following_your_company: bool | None = None,
965
+ account_lists: dict[str, Any] | None = None,
966
+ include_saved_accounts: bool | None = None,
967
+ ) -> dict[str, Any]:
968
+ """
969
+ Performs a comprehensive LinkedIn Sales Navigator company search with relevant parameters.
970
+ This function provides access to LinkedIn's advanced Sales Navigator search capabilities
971
+ for finding companies with precise targeting options.
972
+
973
+ Args:
974
+ account_id: The ID of the Unipile account to perform the search from (REQUIRED).
975
+ cursor: Pagination cursor for the next page of entries.
976
+ limit: Number of items to return.
977
+ keywords: LinkedIn native filter: KEYWORDS.
978
+ last_viewed_at: Unix timestamp for saved search filtering.
979
+ saved_search_id: ID of saved search (overrides other parameters).
980
+ recent_search_id: ID of recent search (overrides other parameters).
981
+ location: LinkedIn native filter: GEOGRAPHY.
982
+ location_by_postal_code: Location filter by postal code.
983
+ industry: LinkedIn native filter: INDUSTRY.
984
+ company_headcount: LinkedIn native filter: COMPANY HEADCOUNT. Example {"min": 10, "max": 100}
985
+ company_type: LinkedIn native filter: COMPANY TYPE.
986
+ company_location: LinkedIn native filter: COMPANY HEADQUARTERS LOCATION.
987
+ following_your_company: LinkedIn native filter: FOLLOWING YOUR COMPANY.
988
+ account_lists: LinkedIn native filter: ACCOUNT LISTS.
989
+ include_saved_accounts: LinkedIn native filter: SAVED LEADS AND ACCOUNTS / ALL MY SAVED ACCOUNTS.
990
+
991
+ Returns:
992
+ A dictionary containing search results and pagination details.
993
+
994
+ Raises:
995
+ httpx.HTTPError: If the API request fails.
996
+
997
+ Tags:
998
+ linkedin, sales_navigator, companies, search, advanced, api, important
999
+ """
1000
+ url = f"{self.base_url}/api/v1/linkedin/search"
1001
+
1002
+ params: dict[str, Any] = {"account_id": account_id}
1003
+ if cursor:
1004
+ params["cursor"] = cursor
1005
+ if limit is not None:
1006
+ params["limit"] = limit
1007
+
1008
+ payload: dict[str, Any] = {
1009
+ "api": "sales_navigator",
1010
+ "category": "companies"
1011
+ }
1012
+
1013
+ # Add all the Sales Navigator company-specific parameters
1014
+ sn_params = {
1015
+ "keywords": keywords,
1016
+ "last_viewed_at": last_viewed_at,
1017
+ "saved_search_id": saved_search_id,
1018
+ "recent_search_id": recent_search_id,
1019
+ "location": location,
1020
+ "location_by_postal_code": location_by_postal_code,
1021
+ "industry": industry,
1022
+ "company_headcount": company_headcount,
1023
+ "company_type": company_type,
1024
+ "company_location": company_location,
1025
+ "following_your_company": following_your_company,
1026
+ "account_lists": account_lists,
1027
+ "include_saved_accounts": include_saved_accounts,
1028
+ }
1029
+
1030
+ # Only add parameters that are not None
1031
+ payload.update({k: v for k, v in sn_params.items() if v is not None})
1032
+
1033
+ response = self._post(url, params=params, data=payload)
1034
+ return self._handle_response(response)
1035
+
781
1036
  def retrieve_user_profile(
782
1037
  self,
783
1038
  identifier: str,
@@ -824,4 +1079,6 @@ class UnipileApp(APIApplication):
824
1079
  self.create_post_comment,
825
1080
  self.create_reaction,
826
1081
  self.search,
1082
+ self.people_search,
1083
+ self.company_search,
827
1084
  ]
@@ -1,15 +1,15 @@
1
1
  from typing import Any
2
+ import os
2
3
 
3
4
  from youtube_transcript_api import YouTubeTranscriptApi
4
- from youtube_transcript_api.proxies import GenericProxyConfig
5
-
5
+ from youtube_transcript_api.proxies import WebshareProxyConfig
6
6
 
7
7
  from universal_mcp.applications.application import APIApplication
8
8
  from universal_mcp.integrations import Integration
9
9
 
10
10
 
11
11
  class YoutubeApp(APIApplication):
12
- def __init__(self, integration: Integration = None, **kwargs) -> None:
12
+ def __init__(self, integration: Integration | None = None, **kwargs) -> None:
13
13
  """
14
14
  Initializes an instance of a YouTube application integration.
15
15
 
@@ -298,10 +298,20 @@ class YoutubeApp(APIApplication):
298
298
  raise ValueError("Missing required parameter 'video_id'")
299
299
 
300
300
  try:
301
- api = YouTubeTranscriptApi(
302
- proxy_config=GenericProxyConfig(
303
- http_url="http://xgixgown:lp2wabq23752@142.111.48.253:7030/"
301
+ proxy_username = os.getenv("PROXY_USERNAME")
302
+ proxy_password = os.getenv("PROXY_PASSWORD")
303
+ proxy_port = int(os.getenv("PROXY_PORT", 80))
304
+
305
+ if not proxy_username or not proxy_password:
306
+ raise ValueError(
307
+ "PROXY_USERNAME and PROXY_PASSWORD must be set when using proxy"
304
308
  )
309
+ api = YouTubeTranscriptApi(
310
+ proxy_config=WebshareProxyConfig(
311
+ proxy_username=proxy_username,
312
+ proxy_password=proxy_password,
313
+ proxy_port=proxy_port,
314
+ ),
305
315
  )
306
316
  transcript = api.fetch(video_id)
307
317
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: universal-mcp-applications
3
- Version: 0.1.20
3
+ Version: 0.1.21
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
@@ -190,7 +190,7 @@ universal_mcp/applications/rocketlane/__init__.py,sha256=jl3PjnTvPdjnbFXJgLywSlE
190
190
  universal_mcp/applications/rocketlane/app.py,sha256=Re5-OoUWIIxL_ZJZ_RpEqz82hymgAWtdcOSJtJFzzs0,240690
191
191
  universal_mcp/applications/scraper/README.md,sha256=JUNLshHABs4T1f24nvQeee62YIElSkxpU-zs2kuS0Gw,1497
192
192
  universal_mcp/applications/scraper/__init__.py,sha256=RnkyFDeNR1tOsY_PskHdv4C8AYRbcjMt7KyYQWiGGD8,27
193
- universal_mcp/applications/scraper/app.py,sha256=DPdsmsWuYWXccaUe5_lurHhVeVs1DHbUP8JvIDeWJys,7255
193
+ universal_mcp/applications/scraper/app.py,sha256=rdyeQDGTok2Pb7jBI1AD4gjY_PWRpH3kEyJ1GknYoXg,20088
194
194
  universal_mcp/applications/semanticscholar/README.md,sha256=JpLY_698pvstgoNfQ5Go8C8ehQ-o68uFDX5kr86upK0,2834
195
195
  universal_mcp/applications/semanticscholar/__init__.py,sha256=eR36chrc0pbBsSE1GadvmQH0OmtKnSC91xbE7HcDPf0,36
196
196
  universal_mcp/applications/semanticscholar/app.py,sha256=OHTFkR-IwRU5Rvb1bEu7XmRHikht3hEgZxszLQu6kFI,22234
@@ -251,7 +251,7 @@ universal_mcp/applications/twitter/api_segments/usage_api.py,sha256=aBhjTzYUN16s
251
251
  universal_mcp/applications/twitter/api_segments/users_api.py,sha256=aypLs5_66TRtliSi2TjrQO9l6NuJa2LZn3Ywgwt8hEk,82349
252
252
  universal_mcp/applications/unipile/README.md,sha256=gh_YsmeJ0pAU7XNBZD8OO-AgH7ed2kG8QPbxm2wYjlY,5205
253
253
  universal_mcp/applications/unipile/__init__.py,sha256=0UZVOiYo_dDXbvTmtHrZ_fgvrbpasjWV17EEm4pZq9E,28
254
- universal_mcp/applications/unipile/app.py,sha256=Ssf7a3GijATbgPAGOeZgEvtCxlQd9nRZ750skEO3szE,33483
254
+ universal_mcp/applications/unipile/app.py,sha256=WD_tXktYOjtEhaVwL5QKt9mMLoxhy-lUAzVLI_C6kQ0,45854
255
255
  universal_mcp/applications/whatsapp/README.md,sha256=ZYbpVN0EqMW21ZCMcLNdheKX8OSPCkt3wcN8p8OZk5E,3849
256
256
  universal_mcp/applications/whatsapp/__init__.py,sha256=miHfSBpu5lx226T8dMbvOw_5H6MJCWOKVK_WbqMma-8,29
257
257
  universal_mcp/applications/whatsapp/app.py,sha256=dWuwHBKmUYMB3vROQy7MTvaXa6Mzr40R179APanzcFI,23975
@@ -268,11 +268,11 @@ universal_mcp/applications/yahoo_finance/__init__.py,sha256=ySX-_1nfnbrpeeUwkQG7
268
268
  universal_mcp/applications/yahoo_finance/app.py,sha256=ZmlgcIle0V8njCQf8d_Hm-JqW_Ixhp8f9HG5qigohXA,9424
269
269
  universal_mcp/applications/youtube/README.md,sha256=iK7wyIJrgA_Ai9GWdqMIsuIBQEr7srt5s_RiDeSDuU0,13502
270
270
  universal_mcp/applications/youtube/__init__.py,sha256=HuPQYpxmH_duCaVBXIE_fm-XzSIcqMjpn066tpUkKhQ,28
271
- universal_mcp/applications/youtube/app.py,sha256=t2nrMMq3Yl98gvPgqwAOjRH834ZJfEMj7_KhQ7SgxaA,76464
271
+ universal_mcp/applications/youtube/app.py,sha256=0rHSRc1qRWj9wfdtaKbus927Cc_w4DTJKEHoUNddApw,76926
272
272
  universal_mcp/applications/zenquotes/README.md,sha256=FJyoTGRCaZjF_bsCBqg1CrYcvIfuUG_Qk616G1wjhF8,512
273
273
  universal_mcp/applications/zenquotes/__init__.py,sha256=IkASLYaZiHJXlkGwEMk1HgIq5GwEZp5GhAIiJyjBd3g,30
274
274
  universal_mcp/applications/zenquotes/app.py,sha256=S88JEoVFsyqow-56zcYPgRzhcz59AG_L_RdTFqtSwdA,1323
275
- universal_mcp_applications-0.1.20.dist-info/METADATA,sha256=QRt8-3ntVGKJQaHGswLeOzElisGIfZpQymkuYKFEyE8,2918
276
- universal_mcp_applications-0.1.20.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
277
- universal_mcp_applications-0.1.20.dist-info/licenses/LICENSE,sha256=NweDZVPslBAZFzlgByF158b85GR0f5_tLQgq1NS48To,1063
278
- universal_mcp_applications-0.1.20.dist-info/RECORD,,
275
+ universal_mcp_applications-0.1.21.dist-info/METADATA,sha256=Rbmaw-Tt9xNty_V4G48aUBgqZxDjT0vIqa2rha75HX8,2918
276
+ universal_mcp_applications-0.1.21.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
277
+ universal_mcp_applications-0.1.21.dist-info/licenses/LICENSE,sha256=NweDZVPslBAZFzlgByF158b85GR0f5_tLQgq1NS48To,1063
278
+ universal_mcp_applications-0.1.21.dist-info/RECORD,,