Composio enables AI Agents and LLMs to authenticate and integrate with various tools via function calling.
Composio enables AI Agents and LLMs to authenticate and integrate with various tools via function calling. On Nagent, Composio is exposed as a fully-configurable ai agents integration that any agent can call — 16 actions, and no authentication authentication. No code is required to wire Composio into your workflow — connect it once via the External Integrations panel and reuse it across every agent you build.
Agent builders use Composio to automate the kinds of tasks ai agents teams previously handled manually. Concrete examples — each one is a single agent step in Nagent — include:
Every action and trigger is paired with a structured input/output schema (visible in the sections below), so when you wire Composio into Helix — our agentic agent builder — the editor knows exactly what each step expects and produces. Configure once, deploy anywhere across your Nagent agents.
Every operation an agent can call against Composio, with input parameters and output schema. Drop these into any step of an agent built in Helix.
COMPOSIO_CHECK_ACTIVE_CONNECTIONDeprecated: use check active connections instead for bulk operations. check active connection status for a toolkit or specific connected account id. returns connection details if active, or required parameters for establishing connection if none exists. active connections enable agent actions on the toolkit.
Input parameters
Specific connected account ID to check status for
Name of the toolkit to check
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
COMPOSIO_CHECK_ACTIVE_CONNECTIONSCheck active connection status for multiple toolkits or specific connected account ids. returns connection details if active, or required parameters for establishing connection if none exists. active connections enable agent actions on toolkits.
Input parameters
List of connection check requests
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
COMPOSIO_CREATE_PLANThis is a workflow builder that ensures the LLM produces a complete, step-by-step plan for any use case. WHEN TO CALL: - Call this tool based on COMPOSIO_SEARCH_TOOLS output. If search tools response indicates create_plan should be called and the usecase is not easy, call it. - Use this tool after COMPOSIO_SEARCH_TOOLS or COMPOSIO_MANAGE_CONNECTIONS to generate an execution plan for the user's use case. - USE for medium or hard tasks — skip it for easy ones. - If the user switches to a new use case in the same chat and COMPOSIO_SEARCH_TOOLS again instructs you to call the planner, you MUST call this tool again for that new use case. Memory Integration: - You can choose to add the memory received from the search tool into the known_fields parameter of the plan function to enhance planning with discovered relationships and information. Outputs a complete plan with sections such as "workflow_steps", "complexity_assessment", "decision_matrix", "failure_handling" "output_format", and more as needed. If you skip this step for non-easy tasks, workflows will likely be incomplete, or fail during execution for complex tasks. Calling it guarantees reliable, accurate, and end-to-end workflows aligned with the available tools and connections.
Input parameters
Difficulty level for the plan. Choose "medium" for moderate complexity (summarize slack messages from last day), and "hard" for complex tasks requiring multiple steps or advanced logic (create personalized draft for 100 emails). Do not call for easy tasks.
Provide any workflow inputs you already know as comma-separated key:value pairs (not an array). E.g. channel name, user email, timezone, etc. This helps the tool infer or look up relevant memories (like resoliving channel_id from a given channel_name). Keep max 2-3 short and structured values— focus on stable identifiers, names, emails, or settings only. Do not include free-form or long text (like messages, notes, or descriptions). Example: "channel_name:pod-sdk, channel_id:123, user_names:John,Maria, timezone:Asia/Kolkata"
List of primary tool slugs that can accomplish the main task. Never invent tool slugs, only use the ones given by Search. For example: \['GITHUB_LIST_PULL_REQUESTS', 'SLACK_SEND_MESSAGE'\]
Short reasoning from the search about the use case and how the selected tools can accomplish it
List of related/supporting tool slugs that might be useful. These are optional tools that could help with the task. Never invent tool slugs, only use the ones given by Search.
Detailed explanation of the use case the user is trying to accomplish. Include as many details as possible for a better plan
Pass the session_id if you received one from a prior COMPOSIO_SEARCH_TOOLS call.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
COMPOSIO_DOWNLOAD_S3_FILEDownload a file from a public s3 (or r2) url to a local path.
Input parameters
Optional local path where the file should be saved. If not provided, will use a temporary directory with the filename from the URL
Public S3 URL to download the file from
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
COMPOSIO_ENABLE_TRIGGEREnable a specific trigger for the authenticated user.
Input parameters
Configuration parameters for the trigger
Connected account ID to enable trigger for
Slug of the toolkit
Name of the trigger to enable
User ID for the trigger
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
COMPOSIO_EXECUTE_TOOLExecute a tool using the composio api.
Input parameters
Whether to allow destructive tools to be executed. If true, the tool will be executed even if it is destructive.
The arguments to be passed to the tool. The schema of the arguments is present in the retrieve_actions response
The ID of the connected account to use. If not provided, uses the first active connection for the toolkit
The slug of the tool to execute, to be used from the list of tools retrieved using retrieve_actions
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
COMPOSIO_GET_DEPENDENCY_GRAPHGet the dependency graph for a given tool, showing related parent tools that might be useful. this action calls the composio labs dependency graph api to retrieve tools that are commonly used together with or before the specified tool. this helps discover related tools and understand common workflows.
Input parameters
The name of the tool to get dependency graph for
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
COMPOSIO_GET_REQUIRED_PARAMETERSGets the required parameters for connecting to a toolkit via initiate connection. returns the exact parameter names and types needed for initiate connection's parameters field. supports api keys, oauth credentials, connection fields, and hybrid authentication scenarios. if has default credentials is true, you can call initiate connection with empty parameters for seamless oauth flow.
Input parameters
Name of the toolkit to analyze for authentication requirements. Returns parameters for API keys, OAuth credentials, or connection fields needed by initiate_connection.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
COMPOSIO_GET_RESPONSE_SCHEMARetrieves the response schema for a specified composio tool. this action fetches the complete response schema definition for any valid composio tool, returning it as a dictionary that describes the expected response structure.
Input parameters
Name of the tool. For example: GITHUB_LIST_PULL_REQUESTS. You can find the relevant tool names using COMPOSIO_RETRIEVE_ACTIONS tool.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
COMPOSIO_INITIATE_CONNECTIONInitiate a connection to a toolkit with comprehensive authentication support. supports all authentication scenarios: 1. composio default oauth (no parameters needed) 2. custom oauth (user's client id/client secret) 3. api key/bearer token authentication 4. basic auth (username/password) 5. hybrid scenarios (oauth + connection fields like site name) 6. connection-only fields (subdomain, api key at connection level) 7. no authentication required automatically detects and validates auth config vs connection fields, provides helpful error messages for missing parameters.
Input parameters
Authentication parameters for the connection. Structure depends on auth type: API Key Auth: {"generic_api_key": "your_key"} Bearer Token: {"bearer_token": "your_token"} or {"access_token": "your_token"} Basic Auth: {"username": "user", "password": "pass"} Custom OAuth: {"client_id": "your_id", "client_secret": "your_secret"} Connection Fields: {"subdomain": "your_subdomain", "site_name": "your_site"} Examples: - Exa: {"generic_api_key": "your_exa_api_key"} - GitHub (token): {"access_token": "ghp_xxxxx"} - Google Super (OAuth): {"client_id": "xxx.apps.googleusercontent.com", "client_secret": "GOCSPX-xxx"} - SharePoint (hybrid): {"client_id": "your_id", "client_secret": "your_secret", "site_name": "your_site"} - Zendesk (connection only): {"subdomain": "your_subdomain"} Leave empty {} for default OAuth flow (if supported by toolkit). Use get_required_parameters action to see exact parameter names and requirements.
Name of the toolkit to connect (e.g., 'gmail', 'exa', 'github', 'linear')
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
COMPOSIO_LIST_TOOLKITSList all the available toolkits on composio with filtering options.
Input parameters
Filter toolkits by category
Filter toolkits by minimum number of tools
Filter toolkits by name/slug
Only return toolkits that don't require authentication
Limit the number of results returned
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
COMPOSIO_LIST_TRIGGERSList available triggers and their configuration schemas.
Input parameters
List of toolkit names to filter triggers (optional), if not provided/empty, all triggers will be returned
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
COMPOSIO_MANAGE_CONNECTIONSCreate or manage connections to user's apps. Returns a branded authentication link that works for OAuth, API keys, and all other auth types. Call policy: - First call COMPOSIO_SEARCH_TOOLS for the user's query. - If COMPOSIO_SEARCH_TOOLS indicates there is no active connection for a toolkit, call COMPOSIO_MANAGE_CONNECTIONS with the exact toolkit name(s) returned. - Use exact toolkit slugs returned by COMPOSIO_SEARCH_TOOLS; never invent toolkit names. - NEVER execute any toolkit tool without an ACTIVE connection. Tool Behavior: - If a connection is Active, the tool returns the connection details. Always use this to verify connection status and fetch metadata. - If a connection is not Active, returns a authentication link (redirect_url) to create new connection. - If reinitiate_all is true, the tool forces reconnections for all toolkits, even if they already have active connections. Workflow after initiating connection: - Always show the returned redirect_url as a FORMATTED MARKDOWN LINK to the user, and ask them to click on the link to finish authentication. - Begin executing tools only after the connection for that toolkit is confirmed Active.
Input parameters
Toolkit slugs to check or connect. Must be valid toolkit slugs; never invent. Missing connections initiate auth. Examples: \['gmail', 'github', 'slack', 'googlesheets', 'outlook'\].
Force reconnection for all listed toolkits, even if active connections already exist. Use when credentials may be stale, you need fresh credentials/settings, or you are troubleshooting connection issues. This replaces existing active connections with new auth-link flows. Default false.
Pass the session_id if you received one from a prior COMPOSIO_SEARCH_TOOLS call.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
COMPOSIO_MULTI_EXECUTE_TOOLFast and parallel tool executor for tools discovered through COMPOSIO_SEARCH_TOOLS. Use this tool to execute up to 50 tools in parallel across apps only when they're logically independent (no ordering/output dependencies). Response contains structured outputs ready for immediate analysis - avoid reprocessing them via remote bash/workbench tools. Prerequisites: - Always use valid tool slugs and their arguments. NEVER invent tool slugs or argument fields. ALWAYS pass STRICTLY schema-compliant arguments with each tool execution. - Ensure an ACTIVE connection exists for the toolkits that are going to be executed. If none exists, MUST initiate one via COMPOSIO_MANAGE_CONNECTIONS before execution. - Only batch tools that are logically independent - no ordering, no output-to-input dependencies, and no intra-call chaining (tools in one call can't use each other's outputs). DO NOT pass dummy or placeholder inputs; always resolve required inputs using appropriate tools first. Usage guidelines: - If COMPOSIO_SEARCH_TOOLS returns a tool that can perform the task, prefer calling it via this executor. Do not write custom API calls or ad-hoc scripts for tasks that can be completed by available Composio tools. - Prefer parallel execution: group independent tools into a single multi-execute call where possible. - Predictively set sync_response_to_workbench=true if the response may be large or needed for later scripting. It still shows response inline; if the actual response data turns out small and easy to handle, keep everything inline and SKIP workbench usage. - Responses contain structured outputs for each tool. RULE: Small data - process yourself inline; large data - process in the workbench. - ALWAYS include inline references/links to sources in MARKDOWN format directly next to the relevant text. Eg provide slack thread links alongside with summary, render document links instead of raw IDs. Restrictions: Some tools or toolkits may be disabled in this environment. If the response indicates a restriction, inform the user and STOP execution immediately. Do NOT attempt workarounds or speculative actions. - CRITICAL: You MUST always include the 'memory' parameter - never omit it. Even if you think there's nothing to remember, include an empty object {} for memory. Memory Storage: - CRITICAL FORMAT: Memory must be a dictionary where keys are app names (strings) and values are arrays of strings. NEVER pass nested objects or dictionaries as values. - CORRECT format: {"slack": \["Channel general has ID C1234567"\], "gmail": \["John's email is john@example.com"\]} - Write memory entries in natural, descriptive language - NOT as key-value pairs. Use full sentences that clearly describe the relationship or information. - ONLY store information that will be valuable for future tool executions - focus on persistent data that saves API calls. - STORE: ID mappings, entity relationships, configs, stable identifiers. - DO NOT STORE: Action descriptions, temporary status updates, logs, or "sent/fetched" confirmations. - Examples of GOOD memory (store these): * "The important channel in Slack has ID C1234567 and is called #general" * "The team's main repository is owned by user 'teamlead' with ID 98765" * "The user prefers markdown docs with professional writing, no emojis" (user_preference) - Examples of BAD memory (DON'T store these): * "Successfully sent email to john@example.com with message hi" * "Fetching emails from last day (Sep 6, 2025) for analysis" - Do not repeat the memories stored or found previously.
Input parameters
List of logically independent tools to execute in parallel.
One-sentence, concise, high-level rationale (no step-by-step).
Predictively set true when the response may be large or needed for later scripting. Saves the full response to the workbench while returning an inline preview. If the result is small, keep it inline. Default false.
CRITICAL: Memory must be a dictionary with app names as keys and string arrays as values. NEVER use nested objects. Format: {"app_name": \["string1", "string2"\]}. Store durable facts - stable IDs, mappings, roles, preferences. Exclude ephemeral data like message IDs or temp links. Use full sentences describing relationships. Always include this parameter.
Short enum for current step of the workflow execution. Eg FETCHING_EMAILS, GENERATING_REPLIES. Always include to keep execution aligned with the workflow.
Progress metrics for the current step - use to track how far execution has advanced. Format as a string "done/total units" - example "10/100 emails", "0/n messages", "3/10 pages".
Pass the session_id if you received one from a prior COMPOSIO_SEARCH_TOOLS call.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
COMPOSIO_REMOTE_BASH_TOOLExecute bash commands in a REMOTE sandbox for file operations, data processing, and system tasks. Essential for handling large tool responses saved to remote files. **Hard 3-minute (180s) execution limit** — break large tasks into smaller commands. PRIMARY USE CASES: - Process large tool responses saved by COMPOSIO_MULTI_EXECUTE_TOOL to remote sandbox - File system operations, extract specific information from JSON with shell tools like jq, awk, sed, grep, etc. - Commands run from /home/user directory by default
Input parameters
The bash command to execute. **Hard 3-minute (180s) execution limit** — break large tasks into smaller commands.
Pass the session_id if you received one from a prior COMPOSIO_SEARCH_TOOLS call.
Output
Data from the action execution
Error if any occurred during the execution of the action
Whether or not the action execution was successful or not
COMPOSIO_REMOTE_WORKBENCHProcess **REMOTE FILES** or script BULK TOOL EXECUTIONS using Python code IN A REMOTE SANDBOX. If you can see the data in chat, DON'T USE THIS TOOL. **ONLY** use this when processing **data stored in a remote file** or when scripting bulk tool executions. DO NOT USE - When the complete response is already inline/in-memory, or you only need quick parsing, summarization, or basic math. USE IF - To parse/analyze tool outputs saved by COMPOSIO_MULTI_EXECUTE_TOOL to a remote file in the sandbox or to script multi-tool chains there. - For bulk or repeated executions of known Composio tools (e.g., add a label to 100 emails). - To call APIs via proxy_execute when no Composio tool exists for that API. OUTPUTS - Returns a compact result or, if too long, artifacts under `/mnt/files/.composio/output` (cloud-backed FUSE mount, persisted across sandbox restarts). IMPORTANT CODING RULES: 1. Stepwise Execution: Split work into small steps. Save intermediate outputs to `/mnt/files/` (cloud-backed, persisted across failures/timeouts) or variables. Call COMPOSIO_REMOTE_WORKBENCH again for the next step. 2. Notebook Persistence: This is a persistent Jupyter notebook cell: variables, functions, imports, and in-memory state persist across executions. Helper functions are preloaded. 3. Top-level cells: Do not use `return`; Jupyter only allows it inside functions. For final values, end with `output` or `print(output)`, not `return output`. 4. Parallelism & Timeout (CRITICAL): There is a **hard 3-minute (180s) execution limit** per cell. Always prioritize PARALLEL execution using ThreadPoolExecutor for bulk operations - e.g., call run_composio_tool or invoke_llm across rows. If data is large, split it into smaller batches across cells. 5. Checkpoints: Save checkpoints to `/mnt/files/` so that long runs can be resumed from the last completed step, even after a timeout or sandbox restart. 6. Schema Safety: Never assume the response schema for run_composio_tool if not known already from previous tools. To inspect schema, either run a simple request **outside** the workbench or use invoke_llm helper. 7. LLM Helpers: Always use invoke_llm helper for summary, analysis, or field extraction on results; prefer it for much better results over ad hoc filtering. 8. Avoid Meta Loops: Do not use run_composio_tool to call COMPOSIO_* meta tools. Only use it for app tools. 9. Pagination: Use when data spans multiple pages. Continue fetching pages with the returned next_page_token or cursor until none remains. Parallelize page fetches when the tool supports page_number. 10. No Hardcoding: Never hardcode data. Load it from files or tool responses, iterating to construct intermediate or final inputs/outputs. 11. If the final output is in a workbench file, use upload_local_file to download it - never expose the raw workbench file path to the user. Prefer to download useful artifacts after task is complete. ENV & HELPERS: - Home directory: `/home/user`. - NOTE: Helper functions already initialized in the workbench - DO NOT import or redeclare them: - `run_composio_tool(tool_slug: str, arguments: dict) -> tuple\[Dict\[str, Any\], str\]`: Execute a known Composio **app** tool. Do not invent names; match the tool input schema. Use for loops/parallel/bulk calls. i) run_composio_tool returns JSON with top-level "data". Parse carefully—structure may be nested. - `invoke_llm(query: str) -> tuple\[str, str\]`: Invoke an LLM for semantic tasks. Pass MAX 200k characters. i) NOTE Prompting guidance: When building prompts for invoke_llm, prefer f-strings (or concatenation) so literal braces stay intact. If using str.format, escape braces by doubling them ({{ }}). ii) Define the exact JSON schema you want and batch items into smaller groups to stay within token limit. - `upload_local_file(*file_paths) -> tuple\[Dict\[str, Any\], str\]`: Upload sandbox files to Composio S3/R2 storage for user-downloadable artifacts. - `proxy_execute(method, endpoint, toolkit, query_params=None, body=None, headers=None) -> tuple\[Any, str\]`: Call a toolkit API directly when no Composio tool exists. Only one toolkit can be invoked with proxy_execute per workbench call - `web_search(query: str) -> tuple\[str, str\]`: Search the web for information. - `smart_file_extract(sandbox_file_path: str, show_preview: bool = True) -> tuple\[str, str\]`: Extracts text from files in the sandbox (e.g., PDF, image). - Workbench comes with comprehensive Image Processing (PIL/Pillow, OpenCV, scikit-image), PyTorch ML libraries, Document and Report handling tools (pandoc, python-docx, pdfplumber, reportlab), and standard Data Analysis tools (pandas, numpy, matplotlib) for advanced visual, analytical, and AI tasks. All helper functions return a tuple (result, error). Always check error before using result.
No publicly available marketplace agent is found using this tool yet. There are 65 agents privately built on Nagent that already use Composio.
Build on Nagent
Connect Composio to any Nagent agent in minutes — no API key management, no boilerplate. Just configure and deploy.
The five questions agent builders ask before adopting a new integration.
Open the External Integrations panel inside Nagent (app.nagent.ai/externalIntegration), find Composio, and click "Connect Now." You'll authenticate with no authentication (it’s public) — Nagent handles credential storage and refresh automatically. Once connected, Composio is available to any agent in your workspace.
No. Nagent provides no-code integration for every tool. Once Composio is connected, you configure its 16 actions directly in the agent builder UI — no API calls, no boilerplate, no schema management.
Helix — Nagent's agentic agent builder — lets you drop Composio steps into any workflow visually. Pick an action (e.g., one of those listed above), fill in the inputs (Helix knows the required vs. optional schema for each parameter), and connect it to upstream/downstream steps. Triggers run as the entry point of an agent, so when a Composio event fires, the agent kicks off automatically.
Every Composio action and trigger ships with a fully-typed schema — input parameters with name, type, required flag, and description, plus the output payload shape. The schemas are documented in the sections above. Helix uses these schemas to validate your configuration at build time and to type-check the data flowing between steps.
Yes. While Composio ships with 16 pre-built ai agents actions, you can layer custom logic around them inside Helix — pre/post-processing steps, conditional branches, retries, or stitching Composio together with other connected tools. For deeper customization, talk to our team about Nagent's Agentic AI Lab — forward-deployed engineers who build Composio-based workflows tailored to your business.