universal-mcp-applications 0.1.19__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
  ]
@@ -0,0 +1,17 @@
1
+ # YahooFinanceApp MCP Server
2
+
3
+ An MCP Server for Yahoo Finance data using the yfinance library.
4
+
5
+ ## 🛠️ Tool List
6
+
7
+ This provides access to Yahoo Finance data including stock information, historical prices, news, and financial statements.
8
+
9
+ | Tool | Description |
10
+ |------|-------------|
11
+ | `get_stock_info` | Gets real-time stock information including current price, market cap, financial ratios, and company details. Returns the complete raw data from Yahoo Finance for maximum flexibility. |
12
+ | `get_stock_history` | Gets historical price data for a stock with OHLCV data, dividends, and stock splits. Returns complete DataFrame with all available historical data. |
13
+ | `get_stock_news` | Gets latest news articles for a stock from Yahoo Finance. Returns raw list of news articles. |
14
+ | `get_financial_statements` | Gets financial statements for a stock from Yahoo Finance. Returns dictionary with financial statement data for income, balance, cashflow, or earnings statements. |
15
+ | `get_stock_recommendations` | Gets analyst recommendations for a stock from Yahoo Finance. Returns list of dictionaries with analyst recommendation data or upgrades/downgrades. |
16
+ | `search` | Search Yahoo Finance for quotes, news, and research using yfinance Search. Returns dictionary containing all available search data. |
17
+ | `lookup_ticker` | Look up ticker symbols by type using yfinance Lookup. Returns list of dictionaries with ticker lookup results filtered by security type (stock, etf, mutualfund, etc). |
@@ -0,0 +1 @@
1
+ from .app import YahooFinanceApp