Composio

raw JSON →
composio: latest (new SDK); composio-openai: 0.11.1 (legacy framework packages) verified Mon May 11 auth: yes python install: verified quickstart: stale

Tool integration platform for AI agents. Provides 250+ pre-built tool integrations (GitHub, Gmail, Slack, Notion, etc.) with managed OAuth across frameworks including OpenAI, Anthropic, LangChain, CrewAI, and AutoGen. Has undergone a major v1→v3 SDK rewrite with significant breaking changes — the majority of tutorials and LLM-generated code targets the old v1 API.

pip install composio
error ModuleNotFoundError: No module named 'composio_crewai'
cause The specific integration package for CrewAI, `composio-crewai`, is not installed or the import path is incorrect. This often happens when integrating Composio with specific AI agent frameworks which require their own dedicated Composio provider packages.
fix
Install the composio-crewai package: pip install composio-crewai
error AttributeError: 'HttpClient' object has no attribute 'tool_router'
cause This error occurs due to a version mismatch in the `composio-client` dependency, specifically in older versions (e.g., 0.8.15 to 0.8.18) of the Composio Python SDK where the `tool_router` attribute was missing.
fix
Upgrade the composio and composio-client packages to the latest versions: pip install --upgrade composio composio-client
error 426 NONEXISTENT_VERSION
cause This error indicates that an older, possibly inactive or unsupported, version of a Composio toolkit is being requested or used when making a tool call. This is common during SDK updates where tool versioning changes.
fix
Ensure you are requesting the 'latest' version of the toolkit or explicitly pass the current supported version. For API calls, this might involve setting version: 'latest' or toolkit_versions: 'latest' in your request payload.
error ModuleNotFoundError: No module named 'base' (when importing from langflow.components.composio.googletasks_composio)
cause This issue arises when a third-party integration (like a Langflow component for Composio's Google Tasks) tries to import a module (`base`) that is either missing from the installed Composio package or has been relocated/refactored in newer SDK versions, indicating an incompatibility or outdated integration.
fix
Update both composio and the integrating library (langflow in this case) to their latest compatible versions. If the issue persists, check the integration's documentation for specific Composio version requirements or alternative import paths.
error AttributeError: 'ChatCompletionOutputToolCall' object has no attribute 'model_dump'
cause This error typically occurs when using Composio tools within certain AI agent frameworks (e.g., `phi.agent`) where the agent's output for tool calls (e.g., `ChatCompletionOutputToolCall`) does not have the `model_dump` method expected by the subsequent processing logic. This usually points to an incompatibility or version mismatch between the agent framework and how it handles tool outputs versus what Composio or the model expects.
fix
Update the agent framework (e.g., phi.agent) and related dependencies to their latest versions to ensure compatibility with how tool calls are structured and processed. Alternatively, adapt the agent's tool call handling to correctly extract arguments without relying on model_dump if the framework provides an alternative.
breaking composio-core is deprecated. All tutorials and LLM-generated code using 'pip install composio-core' or 'from composio_core import ...' targets the old package. New package is 'composio'.
fix Replace pip install composio-core with pip install composio. Import paths change accordingly.
breaking v1 used framework-specific toolset classes (ComposioToolSet from composio_openai, composio_langchain, etc.) with entity_id set at the toolset level. v3 uses a single Composio class with provider injection and user_id passed per tool call.
fix Replace ComposioToolSet() + entity_id with Composio(provider=XProvider()) + user_id= in tools.get(). See docs.composio.dev/docs/migration-guide/new-sdk
breaking entity_id parameter renamed to user_id throughout the v3 SDK. Code passing entity_id= will raise TypeError.
fix Replace all entity_id= with user_id=.
breaking Connected account IDs changed from UUID format to nano ID format in v3. Stored IDs from v1/v2 are invalid in v3 API calls.
fix Re-fetch connected account IDs using the new SDK after migration.
breaking Local tools (shelltool, sqltool, clipboard) were removed from the v3 SDK. They are listed as 'in development' for the new SDK.
fix Use alternative local execution approaches or pin to legacy composio-core if these tools are required.
breaking Webhook payload format changed with v3. New organizations receive Webhook Payload V3 (Standard Webhooks spec) by default. Trigger event data is now separated into data and metadata fields. Old payload parsers will fail.
fix Update webhook handlers to read from data field instead of root payload. Check x-composio-webhook-version header to detect format.
breaking Composio-managed Twitter/X credentials removed. Twitter toolkit integrations built on managed credentials no longer authenticate.
fix Register your own Twitter Developer credentials and configure them in your auth config.
gotcha The v3 SDK (pip install composio) and legacy framework packages (pip install composio-openai etc.) coexist on PyPI and can both be installed. They have incompatible APIs and can conflict if imported in the same project.
fix Pick one approach. For new projects use pip install composio only. Do not mix composio and composio-openai/composio-langchain in the same environment.
gotcha The v3 SDK requires Python 3.10+. Legacy composio-core supported Python 3.8+. Silent import failures occur on 3.8/3.9.
fix Upgrade to Python 3.10+ when migrating to the new SDK.
pip install composio-openai
pip install composio-langchain
python os / libc variant status wheel install import disk
3.10 alpine (musl) composio - - 7.39s 56.0M
3.10 alpine (musl) composio-langchain - - 7.72s 89.8M
3.10 alpine (musl) composio-openai - - 7.12s 56.0M
3.10 slim (glibc) composio - - 5.93s 55M
3.10 slim (glibc) composio-langchain - - 5.87s 101M
3.10 slim (glibc) composio-openai - - 5.74s 55M
3.11 alpine (musl) composio - - 9.22s 61.5M
3.11 alpine (musl) composio-langchain - - 9.97s 101.6M
3.11 alpine (musl) composio-openai - - 8.60s 61.6M
3.11 slim (glibc) composio - - 9.13s 61M
3.11 slim (glibc) composio-langchain - - 8.91s 105M
3.11 slim (glibc) composio-openai - - 9.04s 61M
3.12 alpine (musl) composio - - 7.91s 50.5M
3.12 alpine (musl) composio-langchain - - 9.10s 86.3M
3.12 alpine (musl) composio-openai - - 7.45s 50.6M
3.12 slim (glibc) composio - - 9.94s 50M
3.12 slim (glibc) composio-langchain - - 9.44s 94M
3.12 slim (glibc) composio-openai - - 9.48s 50M
3.13 alpine (musl) composio - - 7.37s 50.2M
3.13 alpine (musl) composio-langchain - - 8.27s 86.0M
3.13 alpine (musl) composio-openai - - 7.03s 50.3M
3.13 slim (glibc) composio - - 8.93s 49M
3.13 slim (glibc) composio-langchain - - 9.24s 93M
3.13 slim (glibc) composio-openai - - 8.65s 49M
3.9 alpine (musl) composio - - - -
3.9 alpine (musl) composio-langchain - - - -
3.9 alpine (musl) composio-openai - - - -
3.9 slim (glibc) composio - - - -
3.9 slim (glibc) composio-langchain - - - -
3.9 slim (glibc) composio-openai - - - -

New v3 SDK uses unified Composio class with provider injection. Legacy framework-specific toolsets still function but receive no new features.

from composio import Composio
from composio.providers import AnthropicProvider
import anthropic

# New v3 SDK pattern
composio = Composio(provider=AnthropicProvider())

user_id = "user@acme.org"
tools = composio.tools.get(
    user_id=user_id,
    toolkits=["GITHUB"]
)

client = anthropic.Anthropic()
response = client.messages.create(
    model="claude-opus-4-6",
    max_tokens=1024,
    tools=tools,
    messages=[{"role": "user", "content": "Star the composiohq/composio repo"}]
)

# ---

# Legacy v1 pattern (still works but deprecated):
from composio_openai import ComposioToolSet, App
toolset = ComposioToolSet()  # entity_id was set here in v1
actions = toolset.get_tools(apps=[App.GITHUB])