{"id":13,"library":"composio","title":"Composio","description":"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.","status":"active","version":"composio: latest (new SDK); composio-openai: 0.11.1 (legacy framework packages)","language":"python","source_language":"en","source_url":"https://docs.composio.dev","tags":["tools","integrations","agents","oauth","agentic","python","ai-tools"],"install":[{"cmd":"pip install composio","lang":"bash","label":"Python (new v3 SDK — recommended)"},{"cmd":"pip install composio-openai","lang":"bash","label":"Python (legacy OpenAI framework package — still maintained but not updated with new features)"},{"cmd":"pip install composio-langchain","lang":"bash","label":"Python (legacy LangChain framework package)"}],"dependencies":[{"reason":"HTTP transport for Composio API calls.","package":"httpx","optional":false}],"imports":[{"note":"Old framework-specific ComposioToolSet pattern is v1. New SDK uses unified Composio class with provider injection.","wrong":"from composio_openai import ComposioToolSet\ntoolset = ComposioToolSet()\ntools = toolset.get_tools(apps=[App.GITHUB])","symbol":"Composio (new v3 SDK)","correct":"from composio import Composio\ncomposio = Composio()\ntools = composio.tools.get(user_id=\"user@acme.org\", toolkits=[\"GITHUB\"])"},{"note":"composio-core is explicitly deprecated. PyPI page says 'Please use composio instead.'","wrong":"pip install composio-core","symbol":"composio-core (deprecated)","correct":"pip install composio"}],"quickstart":{"code":"from composio import Composio\nfrom composio.providers import AnthropicProvider\nimport anthropic\n\n# New v3 SDK pattern\ncomposio = Composio(provider=AnthropicProvider())\n\nuser_id = \"user@acme.org\"\ntools = composio.tools.get(\n    user_id=user_id,\n    toolkits=[\"GITHUB\"]\n)\n\nclient = anthropic.Anthropic()\nresponse = client.messages.create(\n    model=\"claude-opus-4-6\",\n    max_tokens=1024,\n    tools=tools,\n    messages=[{\"role\": \"user\", \"content\": \"Star the composiohq/composio repo\"}]\n)\n\n# ---\n\n# Legacy v1 pattern (still works but deprecated):\nfrom composio_openai import ComposioToolSet, App\ntoolset = ComposioToolSet()  # entity_id was set here in v1\nactions = toolset.get_tools(apps=[App.GITHUB])","lang":"python","description":"New v3 SDK uses unified Composio class with provider injection. Legacy framework-specific toolsets still function but receive no new features."},"warnings":[{"fix":"Replace pip install composio-core with pip install composio. Import paths change accordingly.","message":"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'.","severity":"breaking","affected_versions":"composio-core all versions"},{"fix":"Replace ComposioToolSet() + entity_id with Composio(provider=XProvider()) + user_id= in tools.get(). See docs.composio.dev/docs/migration-guide/new-sdk","message":"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.","severity":"breaking","affected_versions":"composio-core / composio <0.7"},{"fix":"Replace all entity_id= with user_id=.","message":"entity_id parameter renamed to user_id throughout the v3 SDK. Code passing entity_id= will raise TypeError.","severity":"breaking","affected_versions":"v1/v2 code migrating to v3"},{"fix":"Re-fetch connected account IDs using the new SDK after migration.","message":"Connected account IDs changed from UUID format to nano ID format in v3. Stored IDs from v1/v2 are invalid in v3 API calls.","severity":"breaking","affected_versions":"v3+"},{"fix":"Use alternative local execution approaches or pin to legacy composio-core if these tools are required.","message":"Local tools (shelltool, sqltool, clipboard) were removed from the v3 SDK. They are listed as 'in development' for the new SDK.","severity":"breaking","affected_versions":"v3+"},{"fix":"Update webhook handlers to read from data field instead of root payload. Check x-composio-webhook-version header to detect format.","message":"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.","severity":"breaking","affected_versions":"New orgs created after webhook V3 rollout"},{"fix":"Register your own Twitter Developer credentials and configure them in your auth config.","message":"Composio-managed Twitter/X credentials removed. Twitter toolkit integrations built on managed credentials no longer authenticate.","severity":"breaking","affected_versions":"all"},{"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.","message":"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.","severity":"gotcha","affected_versions":"all"},{"fix":"Upgrade to Python 3.10+ when migrating to the new SDK.","message":"The v3 SDK requires Python 3.10+. Legacy composio-core supported Python 3.8+. Silent import failures occur on 3.8/3.9.","severity":"gotcha","affected_versions":"composio (new SDK)"}],"env_vars":{"optional":[],"required":[{"name":"COMPOSIO_API_KEY","note":"Required. Get from app.composio.dev. Can also pass as api_key= to Composio() constructor."}]},"last_verified":"2026-05-11T18:20:40.092Z","next_check":"2026-04-01T00:00:00.000Z","problems":[{"fix":"Install the `composio-crewai` package: `pip install 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.","error":"ModuleNotFoundError: No module named 'composio_crewai'"},{"fix":"Upgrade the `composio` and `composio-client` packages to the latest versions: `pip install --upgrade composio composio-client`","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.","error":"AttributeError: 'HttpClient' object has no attribute 'tool_router'"},{"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.","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.","error":"426 NONEXISTENT_VERSION"},{"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.","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.","error":"ModuleNotFoundError: No module named 'base' (when importing from langflow.components.composio.googletasks_composio)"},{"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.","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.","error":"AttributeError: 'ChatCompletionOutputToolCall' object has no attribute 'model_dump'"}],"ecosystem":"pypi","meta_description":null,"install_score":85,"install_tag":"verified","quickstart_score":0,"quickstart_tag":"stale","pypi_latest":null,"install_checks":{"last_tested":"2026-05-11","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":7.39,"mem_mb":43.7,"disk_size":"56.0M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":7.72,"mem_mb":43.8,"disk_size":"89.8M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":7.12,"mem_mb":43.7,"disk_size":"56.0M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":5.93,"mem_mb":43.7,"disk_size":"55M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":5.87,"mem_mb":43.8,"disk_size":"101M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":5.74,"mem_mb":43.7,"disk_size":"55M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":9.22,"mem_mb":45.9,"disk_size":"61.5M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":9.97,"mem_mb":46,"disk_size":"101.6M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":8.6,"mem_mb":45.9,"disk_size":"61.6M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":9.13,"mem_mb":45.9,"disk_size":"61M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":8.91,"mem_mb":46,"disk_size":"105M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":9.04,"mem_mb":45.9,"disk_size":"61M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":7.91,"mem_mb":45.6,"disk_size":"50.5M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":9.1,"mem_mb":45.7,"disk_size":"86.3M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":7.45,"mem_mb":45.6,"disk_size":"50.6M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":9.94,"mem_mb":45.6,"disk_size":"50M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":9.44,"mem_mb":45.7,"disk_size":"94M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":9.48,"mem_mb":45.6,"disk_size":"50M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":7.37,"mem_mb":46.4,"disk_size":"50.2M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":8.27,"mem_mb":46.5,"disk_size":"86.0M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":7.03,"mem_mb":46.4,"disk_size":"50.3M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":8.93,"mem_mb":46.4,"disk_size":"49M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":9.24,"mem_mb":46.4,"disk_size":"93M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":8.65,"mem_mb":46.4,"disk_size":"49M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null}]},"quickstart_checks":{"last_tested":"2026-05-11","tag":"stale","tag_description":"widespread failures or data too old to trust","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]}}