universal-mcp-applications 0.1.12__tar.gz → 0.1.36rc4__tar.gz
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.
- universal_mcp_applications-0.1.36rc4/.gitignore +60 -0
- universal_mcp_applications-0.1.36rc4/GEMINI.md +125 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/PKG-INFO +6 -91
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/README.md +1 -88
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/bump_and_release.sh +0 -1
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/pyproject.toml +14 -9
- universal_mcp_applications-0.1.36rc4/src/scripts/check_internal_calls.py +195 -0
- universal_mcp_applications-0.1.36rc4/src/scripts/docgen.py +489 -0
- universal_mcp_applications-0.1.36rc4/src/scripts/make_async.py +99 -0
- universal_mcp_applications-0.1.36rc4/src/scripts/prompts.py +26 -0
- universal_mcp_applications-0.1.36rc4/src/scripts/readme.py +112 -0
- universal_mcp_applications-0.1.36rc4/src/scripts/run_docgen.py +29 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/tests/test_applications.py +11 -12
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/BEST_PRACTICES.md +166 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/ahrefs/README.md +3 -3
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/ahrefs/app.py +52 -198
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/airtable/README.md +3 -3
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/airtable/app.py +23 -123
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/apollo/app.py +111 -465
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/asana/README.md +3 -3
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/asana/app.py +417 -1567
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/aws_s3/README.md +29 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/aws_s3/app.py +63 -129
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/bill/README.md +249 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/bill/app.py +546 -1957
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/box/app.py +1068 -3981
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/braze/app.py +364 -1430
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/browser_use/README.md +1 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/browser_use/app.py +65 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/cal_com_v2/app.py +207 -625
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/calendly/README.md +53 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/calendly/app.py +119 -258
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/canva/README.md +43 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/canva/app.py +109 -178
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/clickup/README.md +4 -4
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/clickup/app.py +207 -674
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/coda/app.py +146 -426
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/confluence/app.py +310 -1099
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/contentful/README.md +1 -2
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/contentful/app.py +40 -156
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/crustdata/README.md +3 -3
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/crustdata/app.py +28 -107
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/dialpad/app.py +283 -756
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/digitalocean/app.py +1766 -5777
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/domain_checker/README.md +13 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/domain_checker/app.py +21 -69
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/e2b/README.md +12 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/e2b/app.py +16 -67
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/elevenlabs/README.md +14 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/elevenlabs/app.py +114 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/exa/README.md +15 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/exa/app.py +10 -16
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/falai/README.md +18 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/falai/app.py +35 -110
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/figma/README.md +3 -3
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/figma/app.py +53 -137
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/file_system/README.md +13 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/file_system/app.py +19 -22
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/firecrawl/README.md +20 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/firecrawl/app.py +61 -163
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/fireflies/README.md +25 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/fireflies/app.py +392 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/fpl/README.md +23 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/fpl/app.py +124 -553
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/fpl/utils/fixtures.py +15 -49
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/fpl/utils/helper.py +25 -89
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/fpl/utils/league_utils.py +20 -64
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/ghost_content/app.py +52 -162
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/github/README.md +21 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/github/app.py +390 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/gong/app.py +88 -248
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_calendar/README.md +21 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_calendar/app.py +34 -87
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_docs/README.md +25 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_docs/app.py +730 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_drive/README.md +65 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_drive/app.py +257 -649
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_gemini/README.md +14 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_gemini/app.py +172 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_mail/README.md +32 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_mail/app.py +112 -195
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_searchconsole/README.md +21 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_searchconsole/app.py +26 -65
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/google_sheet/README.md +36 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_sheet/app.py +252 -736
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_sheet/helper.py +10 -37
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/hashnode/README.md +6 -3
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/hashnode/app.py +393 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/heygen/app.py +44 -122
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/http_tools/README.md +16 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/http_tools/app.py +15 -38
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/hubspot/api_segments/api_segment_base.py +54 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/hubspot/api_segments/crm_api.py +6224 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/hubspot/api_segments/marketing_api.py +1279 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/hubspot/app.py +25 -102
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/jira/app.py +2071 -7987
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/klaviyo/README.md +0 -36
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/klaviyo/app.py +494 -1376
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/linkedin/README.md +34 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/linkedin/app.py +940 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/mailchimp/README.md +3 -3
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/mailchimp/app.py +450 -1605
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/markitdown/app.py +14 -21
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/miro/app.py +217 -699
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/ms_teams/README.md +42 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/ms_teams/app.py +113 -235
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/neon/README.md +3 -3
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/neon/app.py +86 -192
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/notion/app.py +21 -36
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/onedrive/README.md +24 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/onedrive/__init__.py +1 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/onedrive/app.py +316 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/openai/README.md +23 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/openai/app.py +62 -185
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/outlook/README.md +20 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/outlook/app.py +464 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/perplexity/README.md +12 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/perplexity/app.py +50 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/pipedrive/app.py +832 -3142
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/posthog/README.md +133 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/posthog/app.py +163 -432
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/reddit/README.md +32 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/reddit/app.py +720 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/resend/README.md +40 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/resend/app.py +80 -144
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/retell/app.py +14 -41
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/rocketlane/app.py +221 -935
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/scraper/README.md +18 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/scraper/__init__.py +1 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/scraper/app.py +362 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/semanticscholar/app.py +22 -64
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/semrush/README.md +3 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/semrush/app.py +43 -77
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/sendgrid/app.py +512 -1262
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/sentry/app.py +271 -906
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/serpapi/README.md +14 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/serpapi/app.py +45 -150
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/sharepoint/README.md +19 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/sharepoint/app.py +316 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/shopify/app.py +1551 -4288
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/shortcut/README.md +3 -3
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/shortcut/app.py +155 -417
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/slack/README.md +23 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/slack/app.py +65 -116
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/spotify/README.md +3 -3
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/spotify/app.py +126 -325
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/supabase/README.md +3 -3
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/supabase/app.py +104 -213
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/tavily/README.md +12 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/tavily/app.py +3 -3
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/trello/app.py +693 -2656
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/twilio/README.md +15 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twilio/app.py +14 -50
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/twitter/README.md +103 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/compliance_api.py +9 -24
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +18 -35
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/dm_events_api.py +6 -9
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/likes_api.py +8 -13
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/lists_api.py +26 -47
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/spaces_api.py +12 -18
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/trends_api.py +4 -7
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/tweets_api.py +61 -109
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/usage_api.py +2 -7
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/users_api.py +104 -166
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/app.py +15 -11
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/whatsapp/README.md +23 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/whatsapp/app.py +65 -213
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/whatsapp/audio.py +35 -35
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/whatsapp/whatsapp.py +136 -148
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/whatsapp_business/README.md +34 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/whatsapp_business/app.py +109 -322
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/wrike/app.py +45 -118
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/yahoo_finance/README.md +17 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/yahoo_finance/__init__.py +1 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/yahoo_finance/app.py +254 -0
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/youtube/README.md +57 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/youtube/app.py +161 -334
- universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/zenquotes/README.md +12 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/zenquotes/__init__.py +2 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/zenquotes/app.py +5 -5
- universal_mcp_applications-0.1.36rc4/uv.lock +5773 -0
- universal_mcp_applications-0.1.12/.gitignore +0 -40
- universal_mcp_applications-0.1.12/examples/children_story_builder.py +0 -146
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/calendly/README.md +0 -53
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/canva/README.md +0 -43
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/domain_checker/README.md +0 -13
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/e2b/README.md +0 -12
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/elevenlabs/README.md +0 -88
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/elevenlabs/app.py +0 -145
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/exa/README.md +0 -15
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/falai/README.md +0 -17
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/firecrawl/README.md +0 -20
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/fireflies/README.md +0 -25
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/fireflies/app.py +0 -507
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/fpl/README.md +0 -23
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/github/README.md +0 -1049
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/github/app.py +0 -50601
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_calendar/README.md +0 -21
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_docs/README.md +0 -25
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_docs/app.py +0 -760
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_drive/README.md +0 -68
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_gemini/README.md +0 -25
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_gemini/app.py +0 -210
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_mail/README.md +0 -31
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_searchconsole/README.md +0 -21
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/google_sheet/README.md +0 -36
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/hashnode/app.py +0 -456
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/http_tools/README.md +0 -16
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/linkedin/README.md +0 -15
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/linkedin/app.py +0 -243
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/ms_teams/README.md +0 -42
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/openai/README.md +0 -22
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/outlook/README.md +0 -20
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/outlook/app.py +0 -442
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/perplexity/README.md +0 -12
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/perplexity/app.py +0 -65
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/posthog/README.md +0 -132
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/reddit/README.md +0 -135
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/reddit/app.py +0 -4664
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/replicate/README.md +0 -18
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/replicate/__init__.py +0 -1
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/replicate/app.py +0 -495
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/resend/README.md +0 -40
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/scraper/README.md +0 -15
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/scraper/__init__.py +0 -1
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/scraper/app.py +0 -189
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/serpapi/README.md +0 -14
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/sharepoint/README.md +0 -0
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/sharepoint/app.py +0 -216
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/slack/README.md +0 -0
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/tavily/README.md +0 -12
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/twilio/README.md +0 -0
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/twitter/README.md +0 -100
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/unipile/README.md +0 -28
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/unipile/__init__.py +0 -1
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/unipile/app.py +0 -833
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/whatsapp/README.md +0 -23
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/whatsapp_business/README.md +0 -34
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/youtube/README.md +0 -57
- universal_mcp_applications-0.1.12/src/universal_mcp/applications/zenquotes/README.md +0 -12
- universal_mcp_applications-0.1.12/test.py +0 -43
- universal_mcp_applications-0.1.12/uv.lock +0 -4902
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/LICENSE +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/ahrefs/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/airtable/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/apollo/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/apollo/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/asana/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/aws_s3/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/bill/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/box/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/box/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/braze/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/braze/__init__.py +0 -0
- {universal_mcp_applications-0.1.12/src/universal_mcp/applications/twitter/api_segments → universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/browser_use}/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/cal_com_v2/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/cal_com_v2/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/calendly/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/canva/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/clickup/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/coda/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/coda/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/confluence/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/confluence/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/contentful/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/crustdata/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/dialpad/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/dialpad/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/digitalocean/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/digitalocean/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/domain_checker/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/e2b/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/elevenlabs/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/exa/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/falai/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/figma/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/file_system/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/firecrawl/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/fireflies/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/fpl/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/fpl/utils/api.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/fpl/utils/position_utils.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/ghost_content/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/ghost_content/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/github/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/gong/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/gong/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_calendar/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_docs/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_drive/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_gemini/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_mail/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_searchconsole/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/google_sheet/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/hashnode/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/heygen/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/heygen/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/http_tools/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/hubspot/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/hubspot/__init__.py +0 -0
- /universal_mcp_applications-0.1.12/src/universal_mcp/applications/aws_s3/README.md → /universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/hubspot/api_segments/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/jira/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/jira/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/klaviyo/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/linkedin/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/mailchimp/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/markitdown/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/markitdown/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/miro/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/miro/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/ms_teams/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/neon/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/notion/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/notion/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/openai/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/outlook/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/perplexity/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/pipedrive/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/pipedrive/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/posthog/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/reddit/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/resend/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/retell/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/retell/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/rocketlane/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/rocketlane/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/semanticscholar/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/semanticscholar/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/semrush/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/sendgrid/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/sendgrid/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/sentry/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/sentry/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/serpapi/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/sharepoint/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/shopify/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/shopify/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/shortcut/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/slack/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/spotify/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/supabase/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/tavily/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/trello/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/trello/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twilio/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/__init__.py +0 -0
- /universal_mcp_applications-0.1.12/src/universal_mcp/applications/bill/README.md → /universal_mcp_applications-0.1.36rc4/src/universal_mcp/applications/twitter/api_segments/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/api_segment_base.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/twitter/api_segments/openapi_json_api.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/whatsapp/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/whatsapp_business/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/wrike/README.md +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/wrike/__init__.py +0 -0
- {universal_mcp_applications-0.1.12 → universal_mcp_applications-0.1.36rc4}/src/universal_mcp/applications/youtube/__init__.py +0 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Python-generated files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[oc]
|
|
4
|
+
build/
|
|
5
|
+
dist/
|
|
6
|
+
wheels/
|
|
7
|
+
*.egg-info
|
|
8
|
+
|
|
9
|
+
# Virtual environments
|
|
10
|
+
.venv
|
|
11
|
+
|
|
12
|
+
# Environment variables
|
|
13
|
+
.env
|
|
14
|
+
.env.local
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
dump/
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# SQLite database
|
|
21
|
+
*.db
|
|
22
|
+
*.sqlite
|
|
23
|
+
*.sqlite3
|
|
24
|
+
*.db-shm
|
|
25
|
+
*.db-wal
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# Pyright
|
|
29
|
+
.pyright
|
|
30
|
+
|
|
31
|
+
# Ruff
|
|
32
|
+
.ruff_cache
|
|
33
|
+
|
|
34
|
+
# Pytest
|
|
35
|
+
.pytest_cache
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
# Local config
|
|
39
|
+
local_config.json
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# Test Artifacts
|
|
43
|
+
test_artifacts/
|
|
44
|
+
src/universal_mcp/applications/complex/
|
|
45
|
+
src/universal_mcp/applications/test/
|
|
46
|
+
src/universal_mcp/applications/test_with_docs/
|
|
47
|
+
src/universal_mcp/applications/test_without_docs/
|
|
48
|
+
|
|
49
|
+
# Temporary files
|
|
50
|
+
tmp/
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# Docs
|
|
54
|
+
site/
|
|
55
|
+
.cache/
|
|
56
|
+
|
|
57
|
+
# langgraph temporary files
|
|
58
|
+
.langgraph_api/
|
|
59
|
+
langgraph.json
|
|
60
|
+
agentr-1-6c4ebd5cc914.json
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Agent.md — Python + uv
|
|
2
|
+
|
|
3
|
+
Purpose
|
|
4
|
+
- This repository uses Python managed by uv for dependency resolution, virtual environments, locking, and execution. Always prefer uv subcommands (add/remove/run/sync/export) over raw pip/venv commands.
|
|
5
|
+
|
|
6
|
+
Core rules
|
|
7
|
+
- Use `uv add` to add or upgrade dependencies so that both `pyproject.toml` and `uv.lock` stay in sync; do not use `pip install` directly.
|
|
8
|
+
- Keep runtime dependencies in `[project.dependencies]` and development-only tools in the `dev` group via `uv add --dev ...`.
|
|
9
|
+
- Use `uv run` to execute Python, test, and tooling commands without manually activating a virtual environment.
|
|
10
|
+
|
|
11
|
+
Project bootstrap
|
|
12
|
+
- New project (scaffold files): `uv init`
|
|
13
|
+
- First install or clean install: `uv sync`
|
|
14
|
+
- Run the app: `uv run python -m <your_module>` or `uv run main.py`
|
|
15
|
+
- REPL: `uv run python`
|
|
16
|
+
- Scripts in pyproject: prefer `uv run <command>` to ensure the correct environment is used
|
|
17
|
+
|
|
18
|
+
Managing dependencies
|
|
19
|
+
- Add runtime dependency: `uv add <name>` (e.g., `uv add httpx`)
|
|
20
|
+
- Add dev dependencies: `uv add --dev pytest ruff`
|
|
21
|
+
- Pin/upgrade by constraint: `uv add "httpx>=0.27"` or adjust `pyproject.toml` and then `uv sync`
|
|
22
|
+
- Remove dependency: `uv remove <name>`
|
|
23
|
+
- Export lock for external tooling: `uv export --format requirements-txt --output-file requirements.txt`
|
|
24
|
+
|
|
25
|
+
Locking and environments
|
|
26
|
+
- `uv run` and `uv sync` will ensure the environment matches `pyproject.toml` and `uv.lock`
|
|
27
|
+
- Avoid manual `pip install` or manual `venv` activation; let uv manage the environment
|
|
28
|
+
- Commit `uv.lock` to version control for reproducible installs
|
|
29
|
+
|
|
30
|
+
pyproject guidance
|
|
31
|
+
- Dependencies live under `[project]` → `dependencies = [...]`
|
|
32
|
+
- Development-only tooling should go under a dev group (e.g., `uv add --dev ruff pytest`) for clean separation
|
|
33
|
+
- Keep `requires-python` current (e.g., `>=3.12`) to match the team’s baseline
|
|
34
|
+
|
|
35
|
+
Usage in this repo
|
|
36
|
+
- When adding libraries or changing versions, propose `uv add ...` changes that update both `pyproject.toml` and `uv.lock`, then run `uv run pytest -q` to validate
|
|
37
|
+
- Prefer minimal diffs, explain the plan, apply changes, and run tests/tooling via `uv run`
|
|
38
|
+
- If build/test fails, inspect error context, adjust constraints or code, and re-run via `uv run`
|
|
39
|
+
|
|
40
|
+
Common commands (copy/paste)
|
|
41
|
+
- Initialize: `uv init` | Install deps: `uv sync`
|
|
42
|
+
- Add runtime: `uv add <pkg>` | Add dev: `uv add --dev <pkg>`
|
|
43
|
+
- Remove: `uv remove <pkg>`
|
|
44
|
+
- Run app: `uv run python -m <your_module>` or `uv run main.py`
|
|
45
|
+
- Tests: `uv run pytest -q`
|
|
46
|
+
- Lint/format: `uv run ruff check .` and/or `uv run ruff format .`
|
|
47
|
+
- Export: `uv export --format requirements-txt --output-file requirements.txt`
|
|
48
|
+
|
|
49
|
+
Of course. Based on your request and the example `app.py` you provided, here is a new section that you can append to your `gemini.md` file. This section provides clear guidance on how to write effective tool names and descriptions, using the Perplexity `chat` function as a concrete example.
|
|
50
|
+
|
|
51
|
+
The proposed changes will make the function's purpose much clearer, especially its ability to access and cite real-time web information, which is a key feature.
|
|
52
|
+
|
|
53
|
+
***
|
|
54
|
+
|
|
55
|
+
### Tool Function Naming and Descriptions
|
|
56
|
+
|
|
57
|
+
To ensure the AI agent can effectively understand and use the tools available, function names and their descriptions (docstrings) must be clear, descriptive, and accurate. A good description outlines the tool's purpose, its key capabilities, and what it returns.
|
|
58
|
+
|
|
59
|
+
**Core Principles:**
|
|
60
|
+
- **Use Action-Oriented Names:** Function names should be verbs that clearly state what the tool *does* (e.g., `search`, `create_file`, `list_users`).
|
|
61
|
+
- **Be Specific in Descriptions:** The docstring is the primary source of context for the AI. It should explicitly mention the service it interacts with (e.g., "Perplexity AI") and its unique features (e.g., "performs real-time web searches," "provides citations").
|
|
62
|
+
- **Detail Inputs and Outputs:** Clearly describe the purpose of each argument and what the function returns, as this helps the agent formulate correct calls.
|
|
63
|
+
|
|
64
|
+
**Example: Improving the Perplexity Tool**
|
|
65
|
+
|
|
66
|
+
Let's refine the tool in `app.py` to be more descriptive and unlock its full potential. The original `chat` function is too generic. We will rename it to `search` and significantly improve its docstring.
|
|
67
|
+
|
|
68
|
+
**BEFORE:** The original function name and description are too simple.
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
# from app.py
|
|
72
|
+
def chat(
|
|
73
|
+
self,
|
|
74
|
+
query: str,
|
|
75
|
+
model: Literal[...] = "sonar",
|
|
76
|
+
temperature: float = 1,
|
|
77
|
+
system_prompt: str = "Be precise and concise.",
|
|
78
|
+
) -> dict[str, Any] | str:
|
|
79
|
+
"""
|
|
80
|
+
Initiates a chat completion request to generate AI responses using various models with customizable parameters.
|
|
81
|
+
...
|
|
82
|
+
Tags:
|
|
83
|
+
chat, generate, ai, completion, important
|
|
84
|
+
"""
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**AFTER:** The updated name and description are highly specific, highlighting the core web search and citation capabilities. Do not leave any empty lines between the descriptions.
|
|
88
|
+
|
|
89
|
+
```python
|
|
90
|
+
# from app.py
|
|
91
|
+
def search(
|
|
92
|
+
self,
|
|
93
|
+
query: str,
|
|
94
|
+
model: Literal[
|
|
95
|
+
"r1-1776",
|
|
96
|
+
"sonar",
|
|
97
|
+
"sonar-pro",
|
|
98
|
+
"sonar-reasoning",
|
|
99
|
+
"sonar-reasoning-pro",
|
|
100
|
+
"sonar-deep-research",
|
|
101
|
+
] = "sonar-pro",
|
|
102
|
+
temperature: float = 1,
|
|
103
|
+
system_prompt: str = "You are a helpful AI assistant that answers questions using real-time information from the web.",
|
|
104
|
+
) -> dict[str, Any] | str:
|
|
105
|
+
"""
|
|
106
|
+
Performs a real-time web search using Perplexity AI to answer a query with up-to-date information and citations.
|
|
107
|
+
This tool is ideal for questions about current events, facts, or any topic that requires access to the latest information from the internet. It returns a natural language answer along with the sources used.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
query: The search query or question to ask. For example: "What are the latest developments in AI regulation?"
|
|
111
|
+
model: The Perplexity model to use. 'sonar-pro' is recommended for comprehensive, up-to-date answers.
|
|
112
|
+
temperature: Controls randomness in the model's output. Higher values make the output more random, lower values make it more deterministic. Defaults to 1.
|
|
113
|
+
system_prompt: The initial system message to guide the model's behavior.
|
|
114
|
+
|
|
115
|
+
Returns:
|
|
116
|
+
A dictionary containing the generated 'content' (str) and a list of 'citations' (list) from the web search.
|
|
117
|
+
|
|
118
|
+
Raises:
|
|
119
|
+
AuthenticationError: Raised when API authentication fails due to missing or invalid credentials.
|
|
120
|
+
HTTPError: Raised when the API request fails or returns an error status.
|
|
121
|
+
|
|
122
|
+
Tags:
|
|
123
|
+
search, web, research, citations, current events, important
|
|
124
|
+
"""
|
|
125
|
+
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: universal-mcp-applications
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.36rc4
|
|
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
|
|
@@ -13,6 +13,7 @@ Classifier: Programming Language :: Python :: 3
|
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
14
14
|
Requires-Python: >=3.11
|
|
15
15
|
Requires-Dist: boto3>=1.38.32
|
|
16
|
+
Requires-Dist: browser-use-sdk>=2.0.4
|
|
16
17
|
Requires-Dist: dnspython>=2.4.0
|
|
17
18
|
Requires-Dist: e2b-code-interpreter>=1.2.1
|
|
18
19
|
Requires-Dist: elevenlabs>=2.14.0
|
|
@@ -22,7 +23,7 @@ Requires-Dist: google-genai>=1.33.0
|
|
|
22
23
|
Requires-Dist: google-search-results>=2.4.2
|
|
23
24
|
Requires-Dist: gql[all]>=3.5.2
|
|
24
25
|
Requires-Dist: httpx-aiohttp>=0.1.8
|
|
25
|
-
Requires-Dist: markitdown[audio-transcription,az-doc-intel,docx,outlook,pdf,pptx,xls,xlsx]
|
|
26
|
+
Requires-Dist: markitdown[audio-transcription,az-doc-intel,docx,outlook,pdf,pptx,xls,xlsx]>=0.1.3
|
|
26
27
|
Requires-Dist: office365-rest-python-client>=2.6.2
|
|
27
28
|
Requires-Dist: openai>=1.75.0
|
|
28
29
|
Requires-Dist: pyairtable>=3.1.1
|
|
@@ -34,7 +35,8 @@ Requires-Dist: replicate>=1.0.6
|
|
|
34
35
|
Requires-Dist: requests>=2.31.0
|
|
35
36
|
Requires-Dist: resend>=2.10.0
|
|
36
37
|
Requires-Dist: twilio>=9.8.0
|
|
37
|
-
Requires-Dist: universal-mcp>=0.1.
|
|
38
|
+
Requires-Dist: universal-mcp>=0.1.24rc29
|
|
39
|
+
Requires-Dist: yfinance>=0.2.66
|
|
38
40
|
Requires-Dist: youtube-transcript-api==1.2.2
|
|
39
41
|
Provides-Extra: dev
|
|
40
42
|
Requires-Dist: pre-commit; extra == 'dev'
|
|
@@ -85,91 +87,4 @@ result = app.some_method(param1="value1")
|
|
|
85
87
|
|
|
86
88
|
# Process and print the output
|
|
87
89
|
process_output(result)
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
## Included Applications
|
|
91
|
-
|
|
92
|
-
This package includes the following 82 applications:
|
|
93
|
-
|
|
94
|
-
- `ahrefs`
|
|
95
|
-
- `airtable`
|
|
96
|
-
- `apollo`
|
|
97
|
-
- `asana`
|
|
98
|
-
- `aws-s3`
|
|
99
|
-
- `bill`
|
|
100
|
-
- `box`
|
|
101
|
-
- `braze`
|
|
102
|
-
- `cal-com-v2`
|
|
103
|
-
- `calendly`
|
|
104
|
-
- `canva`
|
|
105
|
-
- `clickup`
|
|
106
|
-
- `coda`
|
|
107
|
-
- `confluence`
|
|
108
|
-
- `contentful`
|
|
109
|
-
- `crustdata`
|
|
110
|
-
- `dialpad`
|
|
111
|
-
- `digitalocean`
|
|
112
|
-
- `domain-checker`
|
|
113
|
-
- `e2b`
|
|
114
|
-
- `elevenlabs`
|
|
115
|
-
- `exa`
|
|
116
|
-
- `falai`
|
|
117
|
-
- `figma`
|
|
118
|
-
- `firecrawl`
|
|
119
|
-
- `fireflies`
|
|
120
|
-
- `fpl`
|
|
121
|
-
- `ghost-content`
|
|
122
|
-
- `github`
|
|
123
|
-
- `gong`
|
|
124
|
-
- `google-ads`
|
|
125
|
-
- `google-calendar`
|
|
126
|
-
- `google-docs`
|
|
127
|
-
- `google-drive`
|
|
128
|
-
- `google-gemini`
|
|
129
|
-
- `google-mail`
|
|
130
|
-
- `google-searchconsole`
|
|
131
|
-
- `google-sheet`
|
|
132
|
-
- `hashnode`
|
|
133
|
-
- `heygen`
|
|
134
|
-
- `http-tools`
|
|
135
|
-
- `hubspot`
|
|
136
|
-
- `jira`
|
|
137
|
-
- `klaviyo`
|
|
138
|
-
- `linkedin`
|
|
139
|
-
- `mailchimp`
|
|
140
|
-
- `markitdown`
|
|
141
|
-
- `miro`
|
|
142
|
-
- `ms-teams`
|
|
143
|
-
- `neon`
|
|
144
|
-
- `notion`
|
|
145
|
-
- `openai`
|
|
146
|
-
- `outlook`
|
|
147
|
-
- `perplexity`
|
|
148
|
-
- `pipedrive`
|
|
149
|
-
- `posthog`
|
|
150
|
-
- `reddit`
|
|
151
|
-
- `replicate`
|
|
152
|
-
- `resend`
|
|
153
|
-
- `retell`
|
|
154
|
-
- `rocketlane`
|
|
155
|
-
- `semanticscholar`
|
|
156
|
-
- `semrush`
|
|
157
|
-
- `sendgrid`
|
|
158
|
-
- `sentry`
|
|
159
|
-
- `serpapi`
|
|
160
|
-
- `sharepoint`
|
|
161
|
-
- `shopify`
|
|
162
|
-
- `shortcut`
|
|
163
|
-
- `slack`
|
|
164
|
-
- `spotify`
|
|
165
|
-
- `supabase`
|
|
166
|
-
- `tavily`
|
|
167
|
-
- `trello`
|
|
168
|
-
- `twillo`
|
|
169
|
-
- `twitter`
|
|
170
|
-
- `unipile`
|
|
171
|
-
- `whatsapp`
|
|
172
|
-
- `whatsapp-business`
|
|
173
|
-
- `wrike`
|
|
174
|
-
- `youtube`
|
|
175
|
-
- `zenquotes`
|
|
90
|
+
```
|
|
@@ -39,91 +39,4 @@ result = app.some_method(param1="value1")
|
|
|
39
39
|
|
|
40
40
|
# Process and print the output
|
|
41
41
|
process_output(result)
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
## Included Applications
|
|
45
|
-
|
|
46
|
-
This package includes the following 82 applications:
|
|
47
|
-
|
|
48
|
-
- `ahrefs`
|
|
49
|
-
- `airtable`
|
|
50
|
-
- `apollo`
|
|
51
|
-
- `asana`
|
|
52
|
-
- `aws-s3`
|
|
53
|
-
- `bill`
|
|
54
|
-
- `box`
|
|
55
|
-
- `braze`
|
|
56
|
-
- `cal-com-v2`
|
|
57
|
-
- `calendly`
|
|
58
|
-
- `canva`
|
|
59
|
-
- `clickup`
|
|
60
|
-
- `coda`
|
|
61
|
-
- `confluence`
|
|
62
|
-
- `contentful`
|
|
63
|
-
- `crustdata`
|
|
64
|
-
- `dialpad`
|
|
65
|
-
- `digitalocean`
|
|
66
|
-
- `domain-checker`
|
|
67
|
-
- `e2b`
|
|
68
|
-
- `elevenlabs`
|
|
69
|
-
- `exa`
|
|
70
|
-
- `falai`
|
|
71
|
-
- `figma`
|
|
72
|
-
- `firecrawl`
|
|
73
|
-
- `fireflies`
|
|
74
|
-
- `fpl`
|
|
75
|
-
- `ghost-content`
|
|
76
|
-
- `github`
|
|
77
|
-
- `gong`
|
|
78
|
-
- `google-ads`
|
|
79
|
-
- `google-calendar`
|
|
80
|
-
- `google-docs`
|
|
81
|
-
- `google-drive`
|
|
82
|
-
- `google-gemini`
|
|
83
|
-
- `google-mail`
|
|
84
|
-
- `google-searchconsole`
|
|
85
|
-
- `google-sheet`
|
|
86
|
-
- `hashnode`
|
|
87
|
-
- `heygen`
|
|
88
|
-
- `http-tools`
|
|
89
|
-
- `hubspot`
|
|
90
|
-
- `jira`
|
|
91
|
-
- `klaviyo`
|
|
92
|
-
- `linkedin`
|
|
93
|
-
- `mailchimp`
|
|
94
|
-
- `markitdown`
|
|
95
|
-
- `miro`
|
|
96
|
-
- `ms-teams`
|
|
97
|
-
- `neon`
|
|
98
|
-
- `notion`
|
|
99
|
-
- `openai`
|
|
100
|
-
- `outlook`
|
|
101
|
-
- `perplexity`
|
|
102
|
-
- `pipedrive`
|
|
103
|
-
- `posthog`
|
|
104
|
-
- `reddit`
|
|
105
|
-
- `replicate`
|
|
106
|
-
- `resend`
|
|
107
|
-
- `retell`
|
|
108
|
-
- `rocketlane`
|
|
109
|
-
- `semanticscholar`
|
|
110
|
-
- `semrush`
|
|
111
|
-
- `sendgrid`
|
|
112
|
-
- `sentry`
|
|
113
|
-
- `serpapi`
|
|
114
|
-
- `sharepoint`
|
|
115
|
-
- `shopify`
|
|
116
|
-
- `shortcut`
|
|
117
|
-
- `slack`
|
|
118
|
-
- `spotify`
|
|
119
|
-
- `supabase`
|
|
120
|
-
- `tavily`
|
|
121
|
-
- `trello`
|
|
122
|
-
- `twillo`
|
|
123
|
-
- `twitter`
|
|
124
|
-
- `unipile`
|
|
125
|
-
- `whatsapp`
|
|
126
|
-
- `whatsapp-business`
|
|
127
|
-
- `wrike`
|
|
128
|
-
- `youtube`
|
|
129
|
-
- `zenquotes`
|
|
42
|
+
```
|
|
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
|
|
|
6
6
|
|
|
7
7
|
[project]
|
|
8
8
|
name = "universal-mcp-applications"
|
|
9
|
-
version = "0.1.
|
|
9
|
+
version = "0.1.36-rc4"
|
|
10
10
|
description = "A Universal MCP Application: universal_mcp_applications"
|
|
11
11
|
readme = "README.md"
|
|
12
12
|
requires-python = ">=3.11"
|
|
@@ -21,6 +21,7 @@ classifiers = [
|
|
|
21
21
|
]
|
|
22
22
|
dependencies = [
|
|
23
23
|
"boto3>=1.38.32",
|
|
24
|
+
"browser-use-sdk>=2.0.4",
|
|
24
25
|
"dnspython>=2.4.0",
|
|
25
26
|
"e2b-code-interpreter>=1.2.1",
|
|
26
27
|
"elevenlabs>=2.14.0",
|
|
@@ -30,7 +31,7 @@ dependencies = [
|
|
|
30
31
|
"google-search-results>=2.4.2",
|
|
31
32
|
"gql[all]>=3.5.2",
|
|
32
33
|
"httpx-aiohttp>=0.1.8",
|
|
33
|
-
"markitdown[audio-transcription,az-doc-intel,docx,outlook,pdf,pptx,xls,xlsx]
|
|
34
|
+
"markitdown[audio-transcription,az-doc-intel,docx,outlook,pdf,pptx,xls,xlsx]>=0.1.3",
|
|
34
35
|
"office365-rest-python-client>=2.6.2",
|
|
35
36
|
"openai>=1.75.0",
|
|
36
37
|
"pyairtable>=3.1.1",
|
|
@@ -42,7 +43,8 @@ dependencies = [
|
|
|
42
43
|
"requests>=2.31.0",
|
|
43
44
|
"resend>=2.10.0",
|
|
44
45
|
"twilio>=9.8.0",
|
|
45
|
-
"universal-mcp>=0.1.
|
|
46
|
+
"universal-mcp>=0.1.24rc29",
|
|
47
|
+
"yfinance>=0.2.66",
|
|
46
48
|
"youtube-transcript-api==1.2.2",
|
|
47
49
|
]
|
|
48
50
|
|
|
@@ -75,7 +77,6 @@ test-cov = "pytest --cov-report term-missing --cov-config=pyproject.toml --cov=s
|
|
|
75
77
|
lint = "ruff check . && ruff format --check ."
|
|
76
78
|
format = "ruff format ."
|
|
77
79
|
|
|
78
|
-
|
|
79
80
|
[tool.hatch.build.targets.wheel]
|
|
80
81
|
packages = [
|
|
81
82
|
"src/universal_mcp",
|
|
@@ -83,7 +84,7 @@ packages = [
|
|
|
83
84
|
|
|
84
85
|
[tool.coverage.run]
|
|
85
86
|
source = [
|
|
86
|
-
"src",
|
|
87
|
+
"src",
|
|
87
88
|
]
|
|
88
89
|
branch = true
|
|
89
90
|
|
|
@@ -92,12 +93,11 @@ show_missing = true
|
|
|
92
93
|
fail_under = 70
|
|
93
94
|
|
|
94
95
|
[tool.ruff]
|
|
95
|
-
line-length =
|
|
96
|
-
select = [
|
|
96
|
+
line-length = 140
|
|
97
|
+
lint.select = [
|
|
97
98
|
"E", "W", "F", "I", "UP", "PL", "T20",
|
|
98
99
|
]
|
|
99
|
-
ignore = []
|
|
100
|
-
|
|
100
|
+
lint.ignore = []
|
|
101
101
|
|
|
102
102
|
[tool.ruff.format]
|
|
103
103
|
quote-style = "double"
|
|
@@ -107,3 +107,8 @@ pythonpath = [
|
|
|
107
107
|
"src",
|
|
108
108
|
]
|
|
109
109
|
|
|
110
|
+
[dependency-groups]
|
|
111
|
+
dev = [
|
|
112
|
+
"litellm>=1.77.3",
|
|
113
|
+
"universal-mcp-agents>=0.1.13",
|
|
114
|
+
]
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import ast
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
# List of applications to be checked for internal calls
|
|
5
|
+
APPS = [
|
|
6
|
+
"ahrefs",
|
|
7
|
+
"airtable",
|
|
8
|
+
"apollo",
|
|
9
|
+
"asana",
|
|
10
|
+
"aws_s3",
|
|
11
|
+
"bill", # not seeded
|
|
12
|
+
"box",
|
|
13
|
+
"braze",
|
|
14
|
+
# "cal_com_v2", # not seeded
|
|
15
|
+
"calendly",
|
|
16
|
+
"canva",
|
|
17
|
+
"clickup",
|
|
18
|
+
"coda",
|
|
19
|
+
"confluence", # not seeded
|
|
20
|
+
"contentful", # not seeded
|
|
21
|
+
"crustdata",
|
|
22
|
+
"dialpad", # not seeded
|
|
23
|
+
"digitalocean",
|
|
24
|
+
"domain_checker",
|
|
25
|
+
"e2b",
|
|
26
|
+
"elevenlabs",
|
|
27
|
+
"exa",
|
|
28
|
+
"falai",
|
|
29
|
+
"figma",
|
|
30
|
+
"file_system",
|
|
31
|
+
"firecrawl",
|
|
32
|
+
"fireflies",
|
|
33
|
+
"fpl",
|
|
34
|
+
"ghost_content",
|
|
35
|
+
"github",
|
|
36
|
+
"gong",
|
|
37
|
+
"google_calendar",
|
|
38
|
+
"google_docs",
|
|
39
|
+
"google_drive",
|
|
40
|
+
"google_gemini",
|
|
41
|
+
"google_mail",
|
|
42
|
+
"google_searchconsole",
|
|
43
|
+
"google_sheet",
|
|
44
|
+
"hashnode",
|
|
45
|
+
"heygen",
|
|
46
|
+
"http_tools",
|
|
47
|
+
"hubspot",
|
|
48
|
+
"jira",
|
|
49
|
+
"klaviyo",
|
|
50
|
+
"linkedin",
|
|
51
|
+
"mailchimp",
|
|
52
|
+
"markitdown",
|
|
53
|
+
"miro",
|
|
54
|
+
"ms_teams",
|
|
55
|
+
"neon",
|
|
56
|
+
"notion",
|
|
57
|
+
"onedrive",
|
|
58
|
+
"openai",
|
|
59
|
+
"outlook",
|
|
60
|
+
"perplexity",
|
|
61
|
+
"pipedrive", # not seeded
|
|
62
|
+
"posthog",
|
|
63
|
+
"reddit",
|
|
64
|
+
"resend",
|
|
65
|
+
"retell",
|
|
66
|
+
"rocketlane",
|
|
67
|
+
"scraper",
|
|
68
|
+
"semanticscholar",
|
|
69
|
+
"semrush", # not seeded
|
|
70
|
+
"sendgrid",
|
|
71
|
+
"sentry",
|
|
72
|
+
"serpapi",
|
|
73
|
+
"sharepoint",
|
|
74
|
+
"shopify",
|
|
75
|
+
"shortcut",
|
|
76
|
+
"slack",
|
|
77
|
+
"spotify", # not seeded
|
|
78
|
+
"supabase",
|
|
79
|
+
"tavily",
|
|
80
|
+
"trello",
|
|
81
|
+
"twilio",
|
|
82
|
+
"twitter",
|
|
83
|
+
"whatsapp",
|
|
84
|
+
"whatsapp_business",
|
|
85
|
+
"wrike", # not seeded
|
|
86
|
+
"yahoo_finance",
|
|
87
|
+
"youtube",
|
|
88
|
+
"zenquotes",
|
|
89
|
+
]
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class InternalCallFinder(ast.NodeVisitor):
|
|
93
|
+
"""
|
|
94
|
+
An AST visitor that finds calls to tool functions from within other tool functions.
|
|
95
|
+
"""
|
|
96
|
+
|
|
97
|
+
def __init__(self, tool_functions):
|
|
98
|
+
self.tool_functions = set(tool_functions)
|
|
99
|
+
self.current_function = None
|
|
100
|
+
self.internal_calls = []
|
|
101
|
+
|
|
102
|
+
def visit_FunctionDef(self, node):
|
|
103
|
+
if node.name in self.tool_functions:
|
|
104
|
+
self.current_function = node.name
|
|
105
|
+
self.generic_visit(node)
|
|
106
|
+
self.current_function = None
|
|
107
|
+
else:
|
|
108
|
+
self.generic_visit(node)
|
|
109
|
+
|
|
110
|
+
def visit_AsyncFunctionDef(self, node):
|
|
111
|
+
if node.name in self.tool_functions:
|
|
112
|
+
self.current_function = node.name
|
|
113
|
+
self.generic_visit(node)
|
|
114
|
+
self.current_function = None
|
|
115
|
+
else:
|
|
116
|
+
self.generic_visit(node)
|
|
117
|
+
|
|
118
|
+
def visit_Call(self, node):
|
|
119
|
+
if self.current_function:
|
|
120
|
+
if isinstance(node.func, ast.Attribute) and isinstance(node.func.value, ast.Name) and node.func.value.id == "self":
|
|
121
|
+
called_func_name = node.func.attr
|
|
122
|
+
if called_func_name in self.tool_functions and called_func_name != self.current_function:
|
|
123
|
+
self.internal_calls.append({"caller": self.current_function, "callee": called_func_name})
|
|
124
|
+
self.generic_visit(node)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def get_tool_function_names(tree):
|
|
128
|
+
"""
|
|
129
|
+
Extracts the names of the tool functions from the 'list_tools' method in the AST.
|
|
130
|
+
"""
|
|
131
|
+
tool_functions = set()
|
|
132
|
+
for node in ast.walk(tree):
|
|
133
|
+
if isinstance(node, ast.ClassDef):
|
|
134
|
+
for item in node.body:
|
|
135
|
+
if isinstance(item, ast.FunctionDef) and item.name == "list_tools":
|
|
136
|
+
for statement in item.body:
|
|
137
|
+
if isinstance(statement, ast.Return):
|
|
138
|
+
if isinstance(statement.value, (ast.List, ast.Tuple)):
|
|
139
|
+
for elt in statement.value.elts:
|
|
140
|
+
if isinstance(elt, ast.Attribute):
|
|
141
|
+
tool_functions.add(elt.attr)
|
|
142
|
+
return list(tool_functions)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def process_file(file_path):
|
|
146
|
+
"""
|
|
147
|
+
Reads and processes a single app.py file to find internal calls.
|
|
148
|
+
"""
|
|
149
|
+
with open(file_path, "r") as f:
|
|
150
|
+
source = f.read()
|
|
151
|
+
try:
|
|
152
|
+
tree = ast.parse(source)
|
|
153
|
+
except SyntaxError as e:
|
|
154
|
+
print(f"Error parsing {file_path}: {e}")
|
|
155
|
+
return []
|
|
156
|
+
|
|
157
|
+
tool_functions = get_tool_function_names(tree)
|
|
158
|
+
if not tool_functions:
|
|
159
|
+
return []
|
|
160
|
+
|
|
161
|
+
finder = InternalCallFinder(tool_functions)
|
|
162
|
+
finder.visit(tree)
|
|
163
|
+
return finder.internal_calls
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def main():
|
|
167
|
+
"""
|
|
168
|
+
Main function to iterate through specified applications and check for internal calls.
|
|
169
|
+
"""
|
|
170
|
+
base_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "universal_mcp", "applications"))
|
|
171
|
+
|
|
172
|
+
apps_with_internal_calls = {}
|
|
173
|
+
|
|
174
|
+
for app in APPS:
|
|
175
|
+
app_path = os.path.join(base_path, app, "app.py")
|
|
176
|
+
if os.path.exists(app_path):
|
|
177
|
+
internal_calls = process_file(app_path)
|
|
178
|
+
if internal_calls:
|
|
179
|
+
apps_with_internal_calls[app] = internal_calls
|
|
180
|
+
else:
|
|
181
|
+
print(f"Could not find {app_path} for application {app}")
|
|
182
|
+
|
|
183
|
+
if apps_with_internal_calls:
|
|
184
|
+
print("Applications with internal tool function calls:")
|
|
185
|
+
for app, calls in apps_with_internal_calls.items():
|
|
186
|
+
print(f"- {app}:")
|
|
187
|
+
unique_calls = {(call["caller"], call["callee"]) for call in calls}
|
|
188
|
+
for caller, callee in sorted(list(unique_calls)):
|
|
189
|
+
print(f" - '{caller}' calls '{callee}'")
|
|
190
|
+
else:
|
|
191
|
+
print("No applications with internal tool function calls found in the specified APPS list.")
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
if __name__ == "__main__":
|
|
195
|
+
main()
|