Metadata-Version: 2.4
Name: composio-langchain
Version: 0.18.0
Summary: Use Composio to get an array of tools with your Langchain agent.
Home-page: https://github.com/ComposioHQ/composio
Author: composio
Author-email: Composio <tech@composio.dev>
Project-URL: Homepage, https://github.com/ComposioHQ/composio
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.10,<4
Description-Content-Type: text/markdown
Requires-Dist: langchain<2.0.0,>=1.3.9
Requires-Dist: composio
Dynamic: author
Dynamic: home-page
Dynamic: requires-python

# composio-langchain

Adapts Composio tools to LangChain's `StructuredTool` format so a LangChain agent can call 1000+ apps through a single Composio session.

## Installation

```bash
pip install composio composio-langchain langchain langchain-openai
```

Set `COMPOSIO_API_KEY` (get one from [dashboard.composio.dev/settings](https://dashboard.composio.dev/settings)) and `OPENAI_API_KEY` in your environment:

```bash
export COMPOSIO_API_KEY=xxxxxxxxx
export OPENAI_API_KEY=xxxxxxxxx
```

## Quickstart

Create a session for your user, fetch its tools, and hand them to `create_agent`. LangChain runs the tool loop; each tool executes itself through Composio.

```python
from composio import Composio
from composio_langchain import LangchainProvider
from langchain.agents import create_agent
from langchain_openai import ChatOpenAI

composio = Composio(provider=LangchainProvider())
llm = ChatOpenAI(model="gpt-5.2")

# Each session is scoped to one of your users
session = composio.create(user_id="user_123")
tools = session.tools()

agent = create_agent(tools=tools, model=llm)
result = agent.invoke(
    {
        "messages": [
            (
                "user",
                "Send an email to john@example.com with the subject 'Hello' and body 'Hello from Composio!'",
            )
        ]
    }
)

print(result["messages"][-1].content)
```

## Error handling

Each wrapped tool builds its `args_schema` from the Composio tool's input schema. When argument validation fails, the tool does not raise; it returns a structured result:

```python
{"successful": False, "error": "<validation message>", "data": None}
```

Check `successful` in tool output instead of wrapping calls in `try`/`except`.

## Links

- [LangChain provider docs](https://docs.composio.dev/docs/providers/langchain)
- [Composio documentation](https://docs.composio.dev)
