universal-mcp-applications 0.1.7__tar.gz → 0.1.9__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.
Potentially problematic release.
This version of universal-mcp-applications might be problematic. Click here for more details.
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/PKG-INFO +2 -2
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/bump_and_release.sh +4 -4
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/pyproject.toml +3 -2
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/e2b/app.py +16 -34
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/firecrawl/app.py +27 -15
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_gemini/app.py +33 -20
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/uv.lock +362 -299
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/.gitignore +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/LICENSE +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/examples/children_story_builder.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/tests/test_applications.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/ahrefs/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/ahrefs/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/ahrefs/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/airtable/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/airtable/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/airtable/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/apollo/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/apollo/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/apollo/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/asana/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/asana/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/asana/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/aws_s3/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/aws_s3/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/aws_s3/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/bill/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/bill/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/bill/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/box/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/box/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/box/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/braze/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/braze/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/braze/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/cal_com_v2/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/cal_com_v2/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/cal_com_v2/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/calendly/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/calendly/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/calendly/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/canva/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/canva/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/canva/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/clickup/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/clickup/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/clickup/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/coda/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/coda/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/coda/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/confluence/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/confluence/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/confluence/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/contentful/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/contentful/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/contentful/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/crustdata/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/crustdata/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/crustdata/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/dialpad/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/dialpad/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/dialpad/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/digitalocean/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/digitalocean/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/digitalocean/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/domain_checker/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/domain_checker/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/domain_checker/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/e2b/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/e2b/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/elevenlabs/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/elevenlabs/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/elevenlabs/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/exa/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/exa/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/exa/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/falai/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/falai/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/falai/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/figma/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/figma/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/figma/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/file_system/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/file_system/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/firecrawl/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/firecrawl/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/fireflies/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/fireflies/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/fireflies/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/fpl/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/fpl/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/fpl/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/fpl/utils/api.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/fpl/utils/fixtures.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/fpl/utils/helper.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/fpl/utils/league_utils.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/fpl/utils/position_utils.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/ghost_content/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/ghost_content/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/ghost_content/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/github/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/github/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/github/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/gong/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/gong/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/gong/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_calendar/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_calendar/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_calendar/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_docs/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_docs/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_docs/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_drive/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_drive/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_drive/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_gemini/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_gemini/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_mail/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_mail/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_mail/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_searchconsole/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_searchconsole/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_searchconsole/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_sheet/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_sheet/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_sheet/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/google_sheet/helper.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/hashnode/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/hashnode/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/hashnode/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/heygen/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/heygen/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/heygen/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/http_tools/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/http_tools/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/http_tools/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/hubspot/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/hubspot/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/hubspot/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/jira/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/jira/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/jira/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/klaviyo/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/klaviyo/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/klaviyo/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/linkedin/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/linkedin/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/linkedin/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/mailchimp/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/mailchimp/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/mailchimp/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/markitdown/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/markitdown/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/markitdown/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/miro/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/miro/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/miro/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/ms_teams/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/ms_teams/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/ms_teams/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/neon/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/neon/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/neon/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/notion/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/notion/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/notion/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/openai/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/openai/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/openai/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/outlook/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/outlook/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/outlook/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/perplexity/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/perplexity/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/perplexity/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/pipedrive/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/pipedrive/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/pipedrive/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/posthog/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/posthog/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/posthog/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/reddit/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/reddit/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/reddit/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/replicate/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/replicate/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/replicate/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/resend/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/resend/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/resend/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/retell/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/retell/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/retell/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/rocketlane/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/rocketlane/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/rocketlane/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/scraper/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/scraper/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/scraper/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/semanticscholar/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/semanticscholar/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/semanticscholar/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/semrush/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/semrush/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/semrush/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/sendgrid/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/sendgrid/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/sendgrid/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/sentry/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/sentry/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/sentry/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/serpapi/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/serpapi/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/serpapi/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/sharepoint/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/sharepoint/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/sharepoint/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/shopify/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/shopify/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/shopify/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/shortcut/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/shortcut/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/shortcut/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/slack/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/slack/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/slack/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/spotify/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/spotify/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/spotify/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/supabase/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/supabase/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/supabase/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/tavily/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/tavily/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/tavily/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/trello/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/trello/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/trello/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twilio/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twilio/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twilio/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twitter/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twitter/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twitter/api_segments/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twitter/api_segments/api_segment_base.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twitter/api_segments/compliance_api.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twitter/api_segments/dm_conversations_api.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twitter/api_segments/dm_events_api.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twitter/api_segments/likes_api.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twitter/api_segments/lists_api.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twitter/api_segments/openapi_json_api.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twitter/api_segments/spaces_api.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twitter/api_segments/trends_api.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twitter/api_segments/tweets_api.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twitter/api_segments/usage_api.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twitter/api_segments/users_api.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/twitter/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/unipile/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/unipile/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/unipile/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/whatsapp/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/whatsapp/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/whatsapp/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/whatsapp/audio.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/whatsapp/whatsapp.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/whatsapp_business/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/whatsapp_business/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/whatsapp_business/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/wrike/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/wrike/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/wrike/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/youtube/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/youtube/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/youtube/app.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/zenquotes/README.md +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/zenquotes/__init__.py +0 -0
- {universal_mcp_applications-0.1.7 → universal_mcp_applications-0.1.9}/src/universal_mcp/applications/zenquotes/app.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: universal-mcp-applications
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.9
|
|
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
|
|
@@ -34,7 +34,7 @@ Requires-Dist: replicate>=1.0.6
|
|
|
34
34
|
Requires-Dist: requests>=2.31.0
|
|
35
35
|
Requires-Dist: resend>=2.10.0
|
|
36
36
|
Requires-Dist: twilio>=9.8.0
|
|
37
|
-
Requires-Dist: universal-mcp>=0.1.
|
|
37
|
+
Requires-Dist: universal-mcp>=0.1.24rc19
|
|
38
38
|
Provides-Extra: dev
|
|
39
39
|
Requires-Dist: pre-commit; extra == 'dev'
|
|
40
40
|
Requires-Dist: ruff; extra == 'dev'
|
|
@@ -5,7 +5,7 @@ set -x
|
|
|
5
5
|
|
|
6
6
|
# Ensure dependencies are installed
|
|
7
7
|
echo "Syncing dependencies..."
|
|
8
|
-
uv sync
|
|
8
|
+
uv sync --all-extras
|
|
9
9
|
|
|
10
10
|
# Run tests with pytest
|
|
11
11
|
echo "Running tests with pytest..."
|
|
@@ -25,7 +25,7 @@ IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VERSION"
|
|
|
25
25
|
# Remove any rc suffix from PATCH if it exists
|
|
26
26
|
PATCH_NUM=$(echo $PATCH | sed 's/-rc[0-9]*//')
|
|
27
27
|
|
|
28
|
-
if [ "$BRANCH" = "master" ]; then
|
|
28
|
+
if [ "$BRANCH" = "master" ] || [ "$BRANCH" = "main" ]; then
|
|
29
29
|
# On main branch - bump patch version
|
|
30
30
|
if [[ $PATCH == *"-rc"* ]]; then
|
|
31
31
|
NEW_VERSION="$MAJOR.$MINOR.$PATCH_NUM"
|
|
@@ -55,7 +55,7 @@ sed -i '' "s/^version = ".*"/version = \"$NEW_VERSION\"/" pyproject.toml
|
|
|
55
55
|
echo "Version bumped from $CURRENT_VERSION to $NEW_VERSION"
|
|
56
56
|
|
|
57
57
|
# Stage the changed file
|
|
58
|
-
git add pyproject.toml
|
|
58
|
+
git add pyproject.toml uv.lock
|
|
59
59
|
|
|
60
60
|
# Commit the change
|
|
61
61
|
git commit -m "bump: version $CURRENT_VERSION → $NEW_VERSION"
|
|
@@ -87,7 +87,7 @@ if [ "$1" = "release" ]; then
|
|
|
87
87
|
rm -rf .idea
|
|
88
88
|
rm -rf .vscode
|
|
89
89
|
|
|
90
|
-
uv
|
|
90
|
+
uv build && uv publish
|
|
91
91
|
echo "Release complete!"
|
|
92
92
|
else
|
|
93
93
|
echo "Skipping release steps"
|
|
@@ -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.9"
|
|
10
10
|
description = "A Universal MCP Application: universal_mcp_applications"
|
|
11
11
|
readme = "README.md"
|
|
12
12
|
requires-python = ">=3.11"
|
|
@@ -42,7 +42,7 @@ dependencies = [
|
|
|
42
42
|
"requests>=2.31.0",
|
|
43
43
|
"resend>=2.10.0",
|
|
44
44
|
"twilio>=9.8.0",
|
|
45
|
-
"universal-mcp
|
|
45
|
+
"universal-mcp>=0.1.24rc19",
|
|
46
46
|
]
|
|
47
47
|
|
|
48
48
|
[project.license]
|
|
@@ -105,3 +105,4 @@ quote-style = "double"
|
|
|
105
105
|
pythonpath = [
|
|
106
106
|
"src",
|
|
107
107
|
]
|
|
108
|
+
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import os
|
|
1
2
|
from typing import Annotated, Any
|
|
2
3
|
|
|
3
4
|
from loguru import logger
|
|
@@ -25,7 +26,7 @@ class E2bApp(APIApplication):
|
|
|
25
26
|
|
|
26
27
|
def __init__(self, integration: Integration | None = None, **kwargs: Any) -> None:
|
|
27
28
|
super().__init__(name="e2b", integration=integration, **kwargs)
|
|
28
|
-
self._e2b_api_key: str | None = None
|
|
29
|
+
self._e2b_api_key: str | None = None
|
|
29
30
|
if Sandbox is None:
|
|
30
31
|
logger.warning(
|
|
31
32
|
"E2B Sandbox SDK is not available. E2B tools will not function."
|
|
@@ -136,48 +137,29 @@ class E2bApp(APIApplication):
|
|
|
136
137
|
execute, sandbox, code-execution, security, important
|
|
137
138
|
"""
|
|
138
139
|
if Sandbox is None:
|
|
139
|
-
|
|
140
|
-
"E2B Sandbox SDK is not available. Cannot execute_python_code."
|
|
141
|
-
)
|
|
142
|
-
raise ToolError(
|
|
143
|
-
"E2B Sandbox SDK (e2b_code_interpreter) is not installed or failed to import."
|
|
144
|
-
)
|
|
145
|
-
|
|
140
|
+
raise ToolError("E2B Sandbox SDK (e2b_code_interpreter) is not installed.")
|
|
146
141
|
if not code or not isinstance(code, str):
|
|
147
142
|
raise ValueError("Provided code must be a non-empty string.")
|
|
148
143
|
|
|
149
|
-
logger.info("Attempting to execute Python code in E2B Sandbox.")
|
|
150
144
|
try:
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
with Sandbox(
|
|
154
|
-
logger.info(
|
|
155
|
-
|
|
156
|
-
)
|
|
157
|
-
execution = sandbox.run_code(
|
|
158
|
-
code=code
|
|
159
|
-
) # run_python is the method in e2b-code-interpreter
|
|
160
|
-
result = self._format_execution_output(
|
|
161
|
-
execution.logs
|
|
162
|
-
) # execution_result directly has logs
|
|
145
|
+
logger.info("Attempting to execute Python code in E2B Sandbox.")
|
|
146
|
+
os.environ["E2B_API_KEY"] = self.e2b_api_key
|
|
147
|
+
with Sandbox.create() as sandbox:
|
|
148
|
+
logger.info("E2B Sandbox initialized. Running code.")
|
|
149
|
+
execution = sandbox.run_code(code)
|
|
150
|
+
result = self._format_execution_output(execution)
|
|
163
151
|
logger.info("E2B code execution successful.")
|
|
164
152
|
return result
|
|
165
|
-
except NotAuthorizedError: # Re-raise if caught from self.e2b_api_key
|
|
166
|
-
raise
|
|
167
153
|
except Exception as e:
|
|
154
|
+
logger.exception("E2B code execution failed.")
|
|
155
|
+
lower = str(e).lower()
|
|
168
156
|
if (
|
|
169
|
-
"authentication" in
|
|
170
|
-
or "api key" in
|
|
171
|
-
or "401" in
|
|
172
|
-
or "
|
|
157
|
+
"authentication" in lower
|
|
158
|
+
or "api key" in lower
|
|
159
|
+
or "401" in lower
|
|
160
|
+
or "403" in lower
|
|
173
161
|
):
|
|
174
|
-
|
|
175
|
-
f"E2B authentication/authorization error: {e}", exc_info=True
|
|
176
|
-
)
|
|
177
|
-
raise NotAuthorizedError(
|
|
178
|
-
f"E2B authentication failed or access denied: {e}"
|
|
179
|
-
)
|
|
180
|
-
logger.error(f"Error during E2B code execution: {e}", exc_info=True)
|
|
162
|
+
raise NotAuthorizedError(f"E2B authentication/permission failed: {e}")
|
|
181
163
|
raise ToolError(f"E2B code execution failed: {e}")
|
|
182
164
|
|
|
183
165
|
def list_tools(self) -> list[callable]:
|
|
@@ -153,6 +153,18 @@ class FirecrawlApp(APIApplication):
|
|
|
153
153
|
|
|
154
154
|
return f"Error during {operation_desc}: {type(e).__name__} - {e}"
|
|
155
155
|
|
|
156
|
+
def _to_serializable(self, obj: Any) -> Any:
|
|
157
|
+
"""
|
|
158
|
+
Recursively converts Pydantic models to dictionaries for JSON serialization.
|
|
159
|
+
"""
|
|
160
|
+
if isinstance(obj, list):
|
|
161
|
+
return [self._to_serializable(item) for item in obj]
|
|
162
|
+
if hasattr(obj, "model_dump"): # Pydantic v2
|
|
163
|
+
return obj.model_dump()
|
|
164
|
+
if hasattr(obj, "dict"): # Pydantic v1
|
|
165
|
+
return obj.dict()
|
|
166
|
+
return obj
|
|
167
|
+
|
|
156
168
|
def scrape_url(self, url: str) -> Any:
|
|
157
169
|
"""
|
|
158
170
|
Scrapes a single URL using Firecrawl and returns the extracted data.
|
|
@@ -176,7 +188,7 @@ class FirecrawlApp(APIApplication):
|
|
|
176
188
|
client = self._get_client()
|
|
177
189
|
response_data = client.scrape(url=url)
|
|
178
190
|
logger.info(f"Successfully scraped URL: {url}")
|
|
179
|
-
return response_data
|
|
191
|
+
return self._to_serializable(response_data)
|
|
180
192
|
except NotAuthorizedError:
|
|
181
193
|
raise
|
|
182
194
|
except ToolError:
|
|
@@ -208,7 +220,7 @@ class FirecrawlApp(APIApplication):
|
|
|
208
220
|
client = self._get_client()
|
|
209
221
|
response = client.search(query=query)
|
|
210
222
|
logger.info(f"Successfully performed Firecrawl search for query: {query}")
|
|
211
|
-
return response
|
|
223
|
+
return self._to_serializable(response)
|
|
212
224
|
except NotAuthorizedError:
|
|
213
225
|
raise
|
|
214
226
|
except ToolError:
|
|
@@ -247,13 +259,13 @@ class FirecrawlApp(APIApplication):
|
|
|
247
259
|
logger.info(
|
|
248
260
|
f"Successfully started Firecrawl crawl for URL {url}, Job ID: {job_id}"
|
|
249
261
|
)
|
|
250
|
-
return response
|
|
262
|
+
return self._to_serializable(response)
|
|
251
263
|
except NotAuthorizedError:
|
|
252
264
|
raise
|
|
253
265
|
except ToolError:
|
|
254
266
|
raise
|
|
255
267
|
except Exception as e:
|
|
256
|
-
return self._handle_firecrawl_exception(e, f"starting crawl for URL {url}")
|
|
268
|
+
return self._handle_firecrawl_exception(e, f"starting crawl for URL {url}")
|
|
257
269
|
|
|
258
270
|
def check_crawl_status(self, job_id: str) -> dict[str, Any] | str:
|
|
259
271
|
"""
|
|
@@ -280,7 +292,7 @@ class FirecrawlApp(APIApplication):
|
|
|
280
292
|
logger.info(
|
|
281
293
|
f"Successfully checked Firecrawl crawl status for job ID: {job_id}"
|
|
282
294
|
)
|
|
283
|
-
return status
|
|
295
|
+
return self._to_serializable(status)
|
|
284
296
|
except NotAuthorizedError:
|
|
285
297
|
raise
|
|
286
298
|
except ToolError:
|
|
@@ -288,7 +300,7 @@ class FirecrawlApp(APIApplication):
|
|
|
288
300
|
except Exception as e:
|
|
289
301
|
return self._handle_firecrawl_exception(
|
|
290
302
|
e, f"checking crawl status for job ID {job_id}"
|
|
291
|
-
)
|
|
303
|
+
)
|
|
292
304
|
|
|
293
305
|
def cancel_crawl(self, job_id: str) -> dict[str, Any] | str:
|
|
294
306
|
"""
|
|
@@ -316,7 +328,7 @@ class FirecrawlApp(APIApplication):
|
|
|
316
328
|
logger.info(
|
|
317
329
|
f"Successfully issued cancel command for Firecrawl crawl job ID: {job_id}"
|
|
318
330
|
)
|
|
319
|
-
return response
|
|
331
|
+
return self._to_serializable(response)
|
|
320
332
|
except NotAuthorizedError:
|
|
321
333
|
raise
|
|
322
334
|
except ToolError:
|
|
@@ -324,7 +336,7 @@ class FirecrawlApp(APIApplication):
|
|
|
324
336
|
except Exception as e:
|
|
325
337
|
return self._handle_firecrawl_exception(
|
|
326
338
|
e, f"cancelling crawl job ID {job_id}"
|
|
327
|
-
)
|
|
339
|
+
)
|
|
328
340
|
|
|
329
341
|
def start_batch_scrape(
|
|
330
342
|
self,
|
|
@@ -354,7 +366,7 @@ class FirecrawlApp(APIApplication):
|
|
|
354
366
|
logger.info(
|
|
355
367
|
f"Successfully started Firecrawl batch scrape for {len(urls)} URLs."
|
|
356
368
|
)
|
|
357
|
-
return response
|
|
369
|
+
return self._to_serializable(response)
|
|
358
370
|
except NotAuthorizedError:
|
|
359
371
|
raise
|
|
360
372
|
except ToolError:
|
|
@@ -362,7 +374,7 @@ class FirecrawlApp(APIApplication):
|
|
|
362
374
|
except Exception as e:
|
|
363
375
|
return self._handle_firecrawl_exception(
|
|
364
376
|
e, f"starting batch scrape for {len(urls)} URLs"
|
|
365
|
-
)
|
|
377
|
+
)
|
|
366
378
|
|
|
367
379
|
def check_batch_scrape_status(self, job_id: str) -> dict[str, Any] | str:
|
|
368
380
|
"""
|
|
@@ -391,7 +403,7 @@ class FirecrawlApp(APIApplication):
|
|
|
391
403
|
logger.info(
|
|
392
404
|
f"Successfully checked Firecrawl batch scrape status for job ID: {job_id}"
|
|
393
405
|
)
|
|
394
|
-
return status
|
|
406
|
+
return self._to_serializable(status)
|
|
395
407
|
except NotAuthorizedError:
|
|
396
408
|
raise
|
|
397
409
|
except ToolError:
|
|
@@ -399,7 +411,7 @@ class FirecrawlApp(APIApplication):
|
|
|
399
411
|
except Exception as e:
|
|
400
412
|
return self._handle_firecrawl_exception(
|
|
401
413
|
e, f"checking batch scrape status for job ID {job_id}"
|
|
402
|
-
)
|
|
414
|
+
)
|
|
403
415
|
|
|
404
416
|
def quick_web_extract(
|
|
405
417
|
self,
|
|
@@ -444,7 +456,7 @@ class FirecrawlApp(APIApplication):
|
|
|
444
456
|
logger.info(
|
|
445
457
|
f"Successfully completed quick web extraction for {len(urls)} URLs."
|
|
446
458
|
)
|
|
447
|
-
return response
|
|
459
|
+
return self._to_serializable(response)
|
|
448
460
|
except NotAuthorizedError:
|
|
449
461
|
logger.error("Firecrawl API key missing or invalid.")
|
|
450
462
|
raise
|
|
@@ -490,7 +502,7 @@ class FirecrawlApp(APIApplication):
|
|
|
490
502
|
logger.info(
|
|
491
503
|
f"Successfully checked Firecrawl extraction status for job ID: {job_id}"
|
|
492
504
|
)
|
|
493
|
-
return status
|
|
505
|
+
return self._to_serializable(status)
|
|
494
506
|
except NotAuthorizedError:
|
|
495
507
|
raise
|
|
496
508
|
except ToolError:
|
|
@@ -498,7 +510,7 @@ class FirecrawlApp(APIApplication):
|
|
|
498
510
|
except Exception as e:
|
|
499
511
|
return self._handle_firecrawl_exception(
|
|
500
512
|
e, f"checking extraction status for job ID {job_id}"
|
|
501
|
-
)
|
|
513
|
+
)
|
|
502
514
|
|
|
503
515
|
def list_tools(self):
|
|
504
516
|
return [
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import base64
|
|
2
|
+
import io
|
|
3
|
+
import os
|
|
1
4
|
import uuid
|
|
2
5
|
import wave
|
|
3
6
|
from typing import Annotated # Added Literal for type hinting
|
|
@@ -71,8 +74,10 @@ class GoogleGeminiApp(APIApplication):
|
|
|
71
74
|
|
|
72
75
|
Args:
|
|
73
76
|
prompt (str): The prompt to generate image from.
|
|
77
|
+
image (str, optional): The reference image path url.
|
|
74
78
|
model (str, optional): The Gemini model to use for image generation. Defaults to "gemini-2.5-flash-image-preview".
|
|
75
79
|
|
|
80
|
+
|
|
76
81
|
Returns:
|
|
77
82
|
list: A list of dicts, each containing either 'text' or 'image_bytes'.
|
|
78
83
|
|
|
@@ -82,7 +87,13 @@ class GoogleGeminiApp(APIApplication):
|
|
|
82
87
|
# The Gemini API is synchronous, so run in a thread
|
|
83
88
|
contents = [prompt]
|
|
84
89
|
if image:
|
|
85
|
-
image
|
|
90
|
+
if image.startswith(('http://', 'https://')):
|
|
91
|
+
import requests
|
|
92
|
+
response = requests.get(image)
|
|
93
|
+
response.raise_for_status()
|
|
94
|
+
image = Image.open(io.BytesIO(response.content))
|
|
95
|
+
else:
|
|
96
|
+
image = Image.open(image)
|
|
86
97
|
contents.append(image)
|
|
87
98
|
response = self.genai_client.models.generate_content(
|
|
88
99
|
model=model,
|
|
@@ -96,15 +107,13 @@ class GoogleGeminiApp(APIApplication):
|
|
|
96
107
|
elif part.inline_data is not None:
|
|
97
108
|
# Return the raw image bytes
|
|
98
109
|
image_bytes = part.inline_data.data
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
)
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
logger.info(f"Text: {text}")
|
|
107
|
-
return {"text": text}
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
img_base64 = base64.b64encode(image_bytes).decode("utf-8")
|
|
113
|
+
|
|
114
|
+
file_name = f"{uuid.uuid4()}.png"
|
|
115
|
+
|
|
116
|
+
return {"type": "image", "data": img_base64, "mime_type": "image/png", "file_name": file_name, "text": text}
|
|
108
117
|
|
|
109
118
|
async def generate_audio(
|
|
110
119
|
self,
|
|
@@ -149,17 +158,21 @@ class GoogleGeminiApp(APIApplication):
|
|
|
149
158
|
|
|
150
159
|
data = response.candidates[0].content.parts[0].inline_data.data
|
|
151
160
|
|
|
152
|
-
file_name = "
|
|
153
|
-
wave_file(file_name, data)
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
+
file_name = f"{uuid.uuid4()}.wav"
|
|
162
|
+
wave_file(file_name, data)
|
|
163
|
+
|
|
164
|
+
# read the file
|
|
165
|
+
with open(file_name, "rb") as f:
|
|
166
|
+
data = f.read()
|
|
167
|
+
|
|
168
|
+
# delete the file
|
|
169
|
+
os.remove(file_name)
|
|
170
|
+
|
|
171
|
+
# Convert to base64
|
|
172
|
+
import base64
|
|
173
|
+
audio_base64 = base64.b64encode(data).decode('utf-8')
|
|
161
174
|
|
|
162
|
-
return
|
|
175
|
+
return {"type": "audio", "data": audio_base64, "mime_type": "audio/wav", "file_name": file_name}
|
|
163
176
|
|
|
164
177
|
def list_tools(self):
|
|
165
178
|
return [
|