Metadata-Version: 2.4
Name: modulex-integrations
Version: 0.13.0
Summary: Community-contributable integrations (tools) for ModuleX
Project-URL: Homepage, https://modulex.dev
Project-URL: Documentation, https://docs.modulex.dev
Project-URL: Repository, https://github.com/ModuleXAI/modulex-integrations
Project-URL: Changelog, https://github.com/ModuleXAI/modulex-integrations/blob/main/CHANGELOG.md
Project-URL: Issues, https://github.com/ModuleXAI/modulex-integrations/issues
Author-email: ModuleX <team@modulex.dev>
License-Expression: MIT
License-File: LICENSE
Keywords: ai,integrations,langchain,modulex,tools
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Typing :: Typed
Requires-Python: >=3.12
Requires-Dist: httpx>=0.25.0
Requires-Dist: langchain-core>=0.3.0
Requires-Dist: pydantic>=2.5.0
Provides-Extra: all
Provides-Extra: dev
Requires-Dist: aiomysql>=0.2.0; extra == 'dev'
Requires-Dist: asyncpg>=0.29.0; extra == 'dev'
Requires-Dist: boto3>=1.34.0; extra == 'dev'
Requires-Dist: cryptography>=41.0; extra == 'dev'
Requires-Dist: elevenlabs>=2.0.0; extra == 'dev'
Requires-Dist: hubspot-api-client>=11.0.0; extra == 'dev'
Requires-Dist: langchain-tavily>=0.2.0; extra == 'dev'
Requires-Dist: mypy>=1.10.0; extra == 'dev'
Requires-Dist: nasdaq-data-link>=1.0.0; extra == 'dev'
Requires-Dist: pymongo>=4.13; extra == 'dev'
Requires-Dist: pymssql>=2.2.8; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
Requires-Dist: pytest-httpx>=0.30.0; extra == 'dev'
Requires-Dist: pytest>=8.0.0; extra == 'dev'
Requires-Dist: ruff>=0.6.0; extra == 'dev'
Requires-Dist: snowflake-connector-python>=3.0.0; extra == 'dev'
Description-Content-Type: text/markdown

<p align="center">
  <a href="https://modulex.dev" target="_blank" rel="noopener noreferrer">
    <picture>
      <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ModuleXAI/modulex-integrations/main/docs/assets/modulex-logo-dark.svg">
      <img src="https://raw.githubusercontent.com/ModuleXAI/modulex-integrations/main/docs/assets/modulex-logo-light.svg" alt="ModuleX" width="220">
    </picture>
  </a>
</p>

<h1 align="center">modulex-integrations</h1>

<p align="center">
  <b>179 integrations · 1,787 actions · 20 categories</b><br>
  Pip-installable LangChain tool integrations for the <a href="https://modulex.dev">ModuleX</a> runtime — and any LangChain / LangGraph agent.
</p>

<p align="center">
  <a href="https://pypi.org/project/modulex-integrations/"><img src="https://img.shields.io/pypi/v/modulex-integrations.svg?labelColor=1A1A1A&color=3B82F6" alt="PyPI version"></a>
  <a href="https://pypi.org/project/modulex-integrations/"><img src="https://img.shields.io/pypi/pyversions/modulex-integrations.svg?labelColor=1A1A1A" alt="Python versions"></a>
  <a href="https://github.com/ModuleXAI/modulex-integrations/actions/workflows/validate.yml"><img src="https://github.com/ModuleXAI/modulex-integrations/actions/workflows/validate.yml/badge.svg" alt="CI"></a>
  <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-green.svg?labelColor=1A1A1A" alt="License: MIT"></a>
  <a href="https://pypi.org/project/modulex-integrations/"><img src="https://img.shields.io/pypi/dm/modulex-integrations.svg?labelColor=1A1A1A" alt="Downloads"></a>
</p>

<p align="center">
  <a href="https://modulex.dev" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/badge/Website-modulex.dev-3B3B3B?labelColor=1A1A1A" alt="modulex.dev"></a>
  <a href="https://docs.modulex.dev" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/badge/Docs-docs.modulex.dev-E6E6E6?labelColor=C3C3C3&color=E6E6E6" alt="Documentation"></a>
  <a href="https://pypi.org/project/modulex-integrations/" target="_blank" rel="noopener noreferrer"><img src="https://img.shields.io/badge/PyPI-modulex--integrations-E6E6E6?logo=pypi&logoColor=1A1A1A&labelColor=C3C3C3&color=E6E6E6" alt="PyPI"></a>
</p>

<p align="center">
  <a href="src/modulex_integrations/tools/github"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/github_dark.svg"><img src="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/github_light.svg" alt="GitHub" height="34"></picture></a>&nbsp;&nbsp;
  <a href="src/modulex_integrations/tools/slack"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/slack_dark.svg"><img src="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/slack_light.svg" alt="Slack" height="34"></picture></a>&nbsp;&nbsp;
  <a href="src/modulex_integrations/tools/notion"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/notion_dark.svg"><img src="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/notion_light.svg" alt="Notion" height="34"></picture></a>&nbsp;&nbsp;
  <a href="src/modulex_integrations/tools/linear"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/linear_dark.svg"><img src="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/linear_light.svg" alt="Linear" height="34"></picture></a>&nbsp;&nbsp;
  <a href="src/modulex_integrations/tools/gmail"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/gmail_dark.svg"><img src="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/gmail_light.svg" alt="Gmail" height="34"></picture></a>&nbsp;&nbsp;
  <a href="src/modulex_integrations/tools/google_drive"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/google_drive_dark.svg"><img src="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/google_drive_light.svg" alt="Google Drive" height="34"></picture></a>&nbsp;&nbsp;
  <a href="src/modulex_integrations/tools/stripe"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/stripe_dark.svg"><img src="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/stripe_light.svg" alt="Stripe" height="34"></picture></a>&nbsp;&nbsp;
  <a href="src/modulex_integrations/tools/hubspot"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/hubspot_dark.svg"><img src="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/hubspot_light.svg" alt="HubSpot" height="34"></picture></a>
</p>
<p align="center">
  <a href="src/modulex_integrations/tools/salesforce"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/salesforce_dark.svg"><img src="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/salesforce_light.svg" alt="Salesforce" height="34"></picture></a>&nbsp;&nbsp;
  <a href="src/modulex_integrations/tools/jira"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/jira_dark.svg"><img src="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/jira_light.svg" alt="Jira" height="34"></picture></a>&nbsp;&nbsp;
  <a href="src/modulex_integrations/tools/figma"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/figma_dark.svg"><img src="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/figma_light.svg" alt="Figma" height="34"></picture></a>&nbsp;&nbsp;
  <a href="src/modulex_integrations/tools/shopify"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/shopify_dark.svg"><img src="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/shopify_light.svg" alt="Shopify" height="34"></picture></a>&nbsp;&nbsp;
  <a href="src/modulex_integrations/tools/qdrant"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/qdrant_dark.svg"><img src="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/qdrant_light.svg" alt="Qdrant" height="34"></picture></a>&nbsp;&nbsp;
  <a href="src/modulex_integrations/tools/pinecone"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/pinecone_dark.svg"><img src="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/pinecone_light.svg" alt="Pinecone" height="34"></picture></a>&nbsp;&nbsp;
  <a href="src/modulex_integrations/tools/weaviate"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/weaviate_dark.svg"><img src="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/weaviate_light.svg" alt="Weaviate" height="34"></picture></a>&nbsp;&nbsp;
  <a href="src/modulex_integrations/tools/mongodb_atlas"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/mongodb_atlas_dark.svg"><img src="https://raw.githubusercontent.com/ModuleXAI/logox/main/tools/mongodb_atlas_light.svg" alt="MongoDB Atlas" height="34"></picture></a>
</p>

<p align="center">…and 160+ more — browse the full catalog at <a href="https://modulex.dev/integrations"><b>modulex.dev/integrations</b></a>, or the source in <a href="src/modulex_integrations/tools"><code>src/modulex_integrations/tools/</code></a>.</p>

---

## What is this?

Every integration in this package exposes one or more **LangChain `@tool`
functions** together with the credential metadata the ModuleX runtime needs
to drive its UI and execution: auth schemas (OAuth2, API key, bearer token,
custom connections), environment-variable definitions, and credential test
endpoints.

- **One contract for everything** — each integration is a pydantic
  [`IntegrationManifest`](src/modulex_integrations/schema.py) with
  `extra="forbid"` on every model. A typo fails at import time, not at
  runtime.
- **Discovered, not registered** — the runtime finds integrations through
  the Python `modulex.tools` entry-point group. Installing the package is
  the whole wiring.
- **Async and pass-through by design** — HTTP tools use `httpx.AsyncClient`
  and return the provider's native response shapes as JSON-serializable
  dicts. Typed pydantic output models in each `outputs.py` give the LLM a
  real JSONSchema for every action's result.
- **Works without ModuleX** — the tools are plain LangChain
  `StructuredTool`s. Load `TOOLS` from any integration and bind them to a
  LangChain or LangGraph agent directly.

## Installation

```bash
pip install modulex-integrations
```

With every integration's optional SDK dependencies (database drivers etc.):

```bash
pip install "modulex-integrations[all]"
```

## Quickstart

Discover everything the package ships:

```python
from importlib.metadata import entry_points

for ep in entry_points(group="modulex.tools"):
    integration = ep.load()
    print(f"{integration.manifest.display_name}: {len(integration.TOOLS)} tools")
```

Or call a tool directly — every action is an async LangChain tool that
returns a plain dict:

```python
import asyncio
from modulex_integrations.tools.qdrant import list_collections

async def main() -> None:
    result = await list_collections.ainvoke({
        "auth_type": "custom",
        "auth_data": {
            "base_url": "https://xyz.eu-west.cloud.qdrant.io:6333",
            "api_key": "...",
        },
    })
    print(result)  # {"success": True, "collections": [...], "error": None}

asyncio.run(main())
```

## Catalog

| Category | Count | Examples |
| --- | ---: | --- |
| Productivity & Collaboration | 21 | notion, google_sheets, figma, docusign |
| Developer Tools & Infrastructure | 19 | github, gitlab, vercel, cloudflare |
| Marketing & Advertising | 17 | mailchimp, google_ads, klaviyo, semrush |
| Sales | 15 | apollo_io, clay, gong, hunter |
| Communication | 14 | slack, gmail, microsoft_teams, twilio |
| Analytics & Data | 9 | databricks, mixpanel, posthog, google_analytics |
| Finance & Payments | 9 | stripe, coinbase, square, mercury |
| Web Search & Scraping | 9 | exa, firecrawl, tavily, apify |
| AI & Machine Learning | 8 | elevenlabs, fal_ai, heygen, mem0 |
| Monitoring & Observability | 8 | datadog, grafana, sentry, pagerduty |
| Cloud Infrastructure | 7 | aws, azure_storage, google_cloud, google_drive |
| E-Commerce | 7 | shopify, etsy, woocommerce, instacart |
| CRM | 6 | hubspot, salesforce, pipedrive, bloomerang |
| Project & Task Management | 6 | jira, linear, airtable, monday |
| Scheduling & Events | 6 | calendly, cal_com, google_calendar, luma |
| Social Media | 6 | linkedin, youtube, pinterest, product_hunt |
| Databases | 5 | postgresql, mysql, snowflake, supabase |
| Vector Database | 4 | qdrant, pinecone, weaviate, mongodb_atlas |
| Customer Support | 2 | intercom, freshdesk |
| Education | 1 | instructure_canvas |

Each integration's own `README.md` documents its auth setup, tools, and
limits — e.g. [github](src/modulex_integrations/tools/github/README.md),
[slack](src/modulex_integrations/tools/slack/README.md),
[qdrant](src/modulex_integrations/tools/qdrant/README.md).

## Per-integration layout

Every integration ships in the same shape:

```
src/modulex_integrations/tools/<name>/
├── __init__.py        # re-exports manifest + TOOLS
├── manifest.py        # IntegrationManifest instance
├── tools.py           # LangChain @tool functions
├── outputs.py         # pydantic response models (UI/docs derive JSONSchema)
├── dependencies.toml  # per-integration runtime deps
├── README.md          # strict 5-section template
└── tests/
    └── test_<name>.py
```

The contract is enforced by the pydantic types in
[`schema.py`](src/modulex_integrations/schema.py), and CI runs the full
test suite plus `ruff` and `mypy --strict` on every PR.

## Versioning & releases

Versions are derived from git tags via `hatch-vcs` — there is no static
version field.

- **Stable** releases (`vX.Y.Z`) are tagged from `main`.
- **Pre-releases** (`vX.Y.ZaN`) are tagged from `staging` and land on PyPI
  as PEP 440 pre-releases.
- The ModuleX runtime consumes this package with exact pins per
  environment.

See [RELEASING.md](RELEASING.md) for the full process and
[CHANGELOG.md](CHANGELOG.md) for what shipped in each version.

## Contributing

Contributions flow through the standard GitHub PR model — adding a new
integration is a single-repo PR. Start with
[CONTRIBUTING.md](CONTRIBUTING.md) for the layout rules and README
template, then verify locally:

```bash
git clone https://github.com/ModuleXAI/modulex-integrations.git
cd modulex-integrations
pip install -e ".[dev]"
pytest && ruff check src tests && mypy src/modulex_integrations
```

## Links

- **Website** — [modulex.dev](https://modulex.dev)
- **Integration gallery** — [modulex.dev/integrations](https://modulex.dev/integrations)
- **Documentation** — [docs.modulex.dev](https://docs.modulex.dev)
- **PyPI** — [pypi.org/project/modulex-integrations](https://pypi.org/project/modulex-integrations/)
- **Issues** — [github.com/ModuleXAI/modulex-integrations/issues](https://github.com/ModuleXAI/modulex-integrations/issues)

## License

MIT — see [LICENSE](LICENSE).
