Composio는 GitHub, Slack, Notion 등 인기 있는 애플리케이션에서 500개 이상의 도구에 대한 액세스를 제공하는 통합 플랫폼입니다. AI 에이전트가 통합 API를 통해 외부 서비스와 상호 작용할 수 있도록 하며, 인증, 권한 및 이벤트 기반 워크플로우를 처리합니다.

Overview

Integration details

ClassPackageSerializableJS supportVersion
Composiocomposio-langchainPyPI - Version

Tool features

  • 500개 이상의 도구 액세스: GitHub, Slack, Gmail, Jira, Notion 등을 위한 사전 구축된 통합
  • 인증 관리: OAuth 플로우, API 키 및 인증 상태 처리
  • 이벤트 기반 워크플로우: 외부 이벤트(새로운 Slack 메시지, GitHub 이슈 등)를 기반으로 에이전트 트리거
  • 세밀한 권한 제어: 사용자별 도구 액세스 및 데이터 노출 제어
  • 커스텀 도구 지원: 독점 API 및 내부 도구 추가

Setup

이 통합은 composio-langchain 패키지에 포함되어 있습니다.
pip install -U composio-langchain

Credentials

Composio API 키가 필요합니다. composio.dev에서 무료로 가입하여 API 키를 받으세요.
Set API key
import getpass
import os

if not os.environ.get("COMPOSIO_API_KEY"):
    os.environ["COMPOSIO_API_KEY"] = getpass.getpass("Enter your Composio API key: ")
추적을 위해 LangSmith를 설정하는 것도 유용합니다:
Enable tracing
# os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
# os.environ["LANGSMITH_TRACING"] = "true"

Instantiation

LangChain provider로 Composio를 초기화하고 특정 toolkit에서 도구를 가져옵니다. 각 toolkit은 여러 도구(수행할 수 있는 작업)가 있는 서비스(예: GitHub, Slack)를 나타냅니다.
Initialize Composio
from composio import Composio
from composio_langchain import LangchainProvider

# Initialize Composio with LangChain provider
composio = Composio(provider=LangchainProvider())

# Get tools from specific toolkits
# You can specify one or more toolkits
tools = composio.tools.get(
    user_id="default",
    toolkits=["GITHUB"]
)

print(f"Loaded {len(tools)} tools from GitHub toolkit")

Available toolkits

Composio는 다양한 서비스를 위한 toolkit을 제공합니다: 생산성: GitHub, Slack, Gmail, Jira, Notion, Asana, Trello, ClickUp 커뮤니케이션: Discord, Telegram, WhatsApp, Microsoft Teams 개발: GitLab, Bitbucket, Linear, Sentry 데이터 및 분석: Google Sheets, Airtable, HubSpot, Salesforce 그리고 100개 이상…

Invocation

Get tools from multiple toolkits

여러 서비스에서 도구를 한 번에 로드할 수 있습니다:
# Get tools from multiple toolkits
tools = composio.tools.get(
    user_id="default",
    toolkits=["GITHUB", "SLACK", "GMAIL"]
)

Get specific tools

전체 toolkit 대신 특정 도구를 로드할 수 있습니다:
# Get specific tools by name
tools = composio.tools.get(
    user_id="default",
    tools=["GITHUB_CREATE_ISSUE", "SLACK_SEND_MESSAGE"]
)

User-specific tools

Composio는 사용자별 인증을 통한 다중 사용자 시나리오를 지원합니다:
# Get tools for a specific user
# This user must have authenticated their accounts first
tools = composio.tools.get(
    user_id="user_123",
    toolkits=["GITHUB"]
)

Use within an agent

다음은 LangChain 에이전트와 함께 Composio 도구를 사용하여 GitHub와 상호 작용하는 완전한 예제입니다:
import os
import getpass

if not os.environ.get("OPENAI_API_KEY"):
    os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter your OpenAI API key: ")
# | output: false
# | echo: false

from langchain.chat_models import init_chat_model

llm = init_chat_model(model="gpt-5", model_provider="openai")
Agent with Composio tools
from composio import Composio
from composio_langchain import LangchainProvider
from langchain import hub
from langchain.agents import AgentExecutor, create_openai_functions_agent

# Pull the prompt template
prompt = hub.pull("hwchase17/openai-functions-agent")

# Initialize Composio
composio = Composio(provider=LangchainProvider())

# Get GitHub tools
tools = composio.tools.get(user_id="default", toolkits=["GITHUB"])

# Define task
task = "Star a repo composiohq/composio on GitHub"

# Create agent
agent = create_openai_functions_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# Execute using agent_executor
agent_executor.invoke({"input": task})

Event-driven workflows

Composio는 외부 이벤트를 기반으로 에이전트를 트리거하는 것을 지원합니다. 연결된 앱에서 이벤트가 발생하면(새로운 GitHub 커밋이나 Slack 메시지 등), trigger가 자동으로 구조화된 페이로드를 애플리케이션에 전송합니다.

Creating a trigger

먼저, 모니터링하려는 이벤트에 대한 trigger를 생성합니다:
from composio import Composio

composio = Composio(api_key="your_api_key")
user_id = "user_123"

# Check what configuration is required for the trigger
trigger_type = composio.triggers.get_type("GITHUB_COMMIT_EVENT")
print(trigger_type.config)

# Create trigger with required configuration
trigger = composio.triggers.create(
    slug="GITHUB_COMMIT_EVENT",
    user_id=user_id,
    trigger_config={
        "owner": "composiohq",
        "repo": "composio"
    }
)

print(f"Trigger created: {trigger.trigger_id}")

Subscribing to triggers (Development)

로컬 개발 및 프로토타이핑을 위해 trigger를 직접 구독할 수 있습니다:
from composio import Composio

composio = Composio(api_key="your_api_key")

# Subscribe to trigger events
subscription = composio.triggers.subscribe()

# Define event handler
@subscription.handle(trigger_id="your_trigger_id")
def handle_github_commit(data):
    print(f"New commit detected: {data}")
    # Process the event with your agent
    # ... invoke your agent with the task

# Note: For production, use webhooks instead

Webhooks (Production)

프로덕션의 경우, Composio 대시보드에서 webhook을 구성하세요:
from fastapi import FastAPI, Request
import json

app = FastAPI()

@app.post("/webhook")
async def webhook_handler(request: Request):
    # Get the webhook payload
    payload = await request.json()

    print("Received trigger event:")
    print(json.dumps(payload, indent=2))

    # Process the event with your agent
    if payload.get("triggerSlug") == "GITHUB_COMMIT_EVENT":
        commit_data = payload.get("payload")
        # ... invoke your agent with commit_data

    return {"status": "success"}
자세한 내용은 Composio Triggers 문서를 참조하세요

Authentication setup

인증이 필요한 도구를 사용하기 전에 사용자는 자신의 계정을 연결해야 합니다:
from composio import Composio

composio = Composio()

# Get authentication URL for a user
auth_connection = composio.integrations.create(
    user_id="user_123",
    integration="github"
)

print(f"Authenticate at: {auth_connection.redirect_url}")

# After authentication, the user's connected account will be available
# and tools will work with their credentials

Multi-user scenarios

여러 사용자가 있는 애플리케이션의 경우:
# Each user authenticates their own accounts
tools_user_1 = composio.tools.get(user_id="user_1", toolkits=["GITHUB"])
tools_user_2 = composio.tools.get(user_id="user_2", toolkits=["GITHUB"])

# Tools will use the respective user's credentials
# User 1's agent will act on User 1's GitHub account
agent_1 = create_agent(llm, tools_user_1)

# User 2's agent will act on User 2's GitHub account
agent_2 = create_agent(llm, tools_user_2)

Advanced features

Custom tools

Composio를 사용하면 내장 도구와 함께 사용할 수 있는 커스텀 도구를 만들 수 있습니다. 두 가지 유형이 있습니다:

Standalone tools

인증이 필요하지 않은 간단한 도구:
from pydantic import BaseModel, Field
from composio import Composio

composio = Composio()

class AddTwoNumbersInput(BaseModel):
    a: int = Field(..., description="The first number to add")
    b: int = Field(..., description="The second number to add")

# Function name will be used as the tool slug
@composio.tools.custom_tool
def add_two_numbers(request: AddTwoNumbersInput) -> int:
    """Add two numbers."""
    return request.a + request.b

# Use with your agent
tools = composio.tools.get(user_id="default", toolkits=["GITHUB"])
tools.append(add_two_numbers)

Toolkit-based tools

인증이 필요하고 toolkit 자격 증명을 사용할 수 있는 도구:
from composio.types import ExecuteRequestFn

class GetIssueInfoInput(BaseModel):
    issue_number: int = Field(
        ..., description="The number of the issue to get information about"
    )

@composio.tools.custom_tool(toolkit="github")
def get_issue_info(
    request: GetIssueInfoInput,
    execute_request: ExecuteRequestFn,
    auth_credentials: dict,
) -> dict:
    """Get information about a GitHub issue."""
    response = execute_request(
        endpoint=f"/repos/composiohq/composio/issues/{request.issue_number}",
        method="GET",
        parameters=[
            {
                "name": "Accept",
                "value": "application/vnd.github.v3+json",
                "type": "header",
            },
            {
                "name": "Authorization",
                "value": f"Bearer {auth_credentials['access_token']}",
                "type": "header",
            },
        ],
    )
    return {"data": response.data}
커스텀 도구 실행:
response = composio.tools.execute(
    user_id="default",
    slug="get_issue_info",  # Use function name as slug
    arguments={"issue_number": 1},
)
자세한 내용은 Composio Custom Tools 문서를 참조하세요

Fine-grained permissions

도구가 수행할 수 있는 작업을 제어합니다:
# Get tools with specific permissions
tools = composio.tools.get(
    user_id="default",
    toolkits=["GITHUB"],
    # Limit to read-only operations
    permissions=["read"]
)

API reference

모든 Composio 기능 및 구성에 대한 자세한 문서는 다음을 참조하세요:
Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I