How to integrate Devin MCP with LangChain

Connect LangChain to Devin MCP. Summarize codebase structure for devin-ai/devin, list all open pull requests for a repo, and more using natural language, with authentication handled for you.

Devin MCP logoDevin MCP
Api Key

Devin MCP is an AI-powered integration for accessing and analyzing GitHub repositories and documentation. It enables secure, automated codebase intelligence, even for private repos.

23 Tools

Introduction

This guide walks you through connecting Devin to LangChain using the Composio tool router. By the end, you'll have a working Devin agent that can summarize codebase structure for devin-ai/devin, list all open pull requests for a repo, generate documentation summary for private repository through natural language commands.

This guide will help you understand how to give your LangChain agent real control over a Devin account through Composio's Devin MCP server.

Before we dive in, let's take a quick look at the key ideas and tools involved.

Also integrate Devin MCP with

TL;DR

Here's what you'll learn:
  • Get and set up your OpenAI and Composio API keys
  • Connect your Devin project to Composio
  • Create a Tool Router MCP session for Devin
  • Initialize an MCP client and retrieve Devin tools
  • Build a LangChain agent that can interact with Devin
  • Set up an interactive chat interface for testing

What is LangChain?

LangChain is a framework for developing applications powered by language models. It provides tools and abstractions for building agents that can reason, use tools, and maintain conversation context.

Key features include:

  • Agent Framework: Build agents that can use tools and make decisions
  • MCP Integration: Connect to external services through Model Context Protocol adapters
  • Memory Management: Maintain conversation history across interactions
  • Multi-Provider Support: Works with OpenAI, Anthropic, and other LLM providers

What is the Devin MCP server, and what's possible with it?

The Devin MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Devin account. It provides structured and secure access to your repository documentation and Devin workflows, so your agent can explore codebases, generate wikis, coordinate sessions, review code, and manage automations on your behalf.

  • Repository research and documentation: Have your agent list indexed repositories, generate codebase wikis, browse documentation topics and content, or ask questions grounded in a repository.
  • Devin session coordination: Direct your agent to create and search sessions, interact with active work, inspect session events, and wait for multiple sessions to finish.
  • Code reviews and security scans: Instruct your agent to trigger reviews, check review status and findings, and manage code security scans.
  • Automations and team knowledge: Let the agent manage Devin automations, playbooks, schedules, knowledge notes, suggestions, and on-call workflows.
  • Integrations and organization settings: Have your agent list users and integrations, manage MCP server installations and billing tags, or find specific Devin settings.

What is the Composio tool router, and how does it fit here?

What is Composio SDK?

Composio's Composio SDK helps agents find the right tools for a task at runtime. You can plug in multiple toolkits (like Gmail, HubSpot, and GitHub), and the agent will identify the relevant app and action to complete multi-step workflows. This can reduce token usage and improve the reliability of tool calls. Read more here: Getting started with Composio SDK

The tool router generates a secure MCP URL that your agents can access to perform actions.

How the Composio SDK works

The Composio SDK follows a three-phase workflow:

  1. Discovery: Searches for tools matching your task and returns relevant toolkits with their details.
  2. Authentication: Checks for active connections. If missing, creates an auth config and returns a connection URL via Auth Link.
  3. Execution: Executes the action using the authenticated connection.

Step-by-step Guide

Step by step10 STEPS
1

Prerequisites

Before starting this tutorial, make sure you have:
  • Python 3.10 or higher installed on your system
  • A Composio account with an API key
  • An OpenAI API key
  • Basic familiarity with Python and async programming
2

Getting API Keys for OpenAI and Composio

OpenAI API Key
  • Go to the OpenAI dashboard and create an API key. You'll need credits to use the models, or you can connect to another model provider.
  • Keep the API key safe.
Composio API Key
  • Log in to the Composio dashboard.
  • Navigate to your API settings and generate a new API key.
  • Store this key securely as you'll need it for authentication.
3

Install dependencies

npm install @composio/langchain @langchain/core @langchain/openai @langchain/mcp-adapters dotenv

Install the required packages for LangChain with MCP support.

What's happening:

  • @composio/langchain provides Composio integration for LangChain
  • @langchain/mcp-adapters enables MCP client connections
  • @langchain/core is the core agent framework
  • dotenv/config loads environment variables
4

Set up environment variables

bash
COMPOSIO_API_KEY=your_composio_api_key_here
COMPOSIO_USER_ID=your_composio_user_id_here
OPENAI_API_KEY=your_openai_api_key_here

Create a .env file in your project root.

What's happening:

  • COMPOSIO_API_KEY authenticates your requests to Composio's API
  • COMPOSIO_USER_ID identifies the user for session management
  • OPENAI_API_KEY enables access to OpenAI's language models
5

Import dependencies

import { Composio } from '@composio/core';
import { LangchainProvider } from '@composio/langchain';
import { MultiServerMCPClient } from "@langchain/mcp-adapters";
import { createAgent } from "langchain";
import * as readline from 'readline';
import 'dotenv/config';

dotenv.config();
What's happening:
  • We're importing LangChain's MCP adapter and Composio SDK
  • The dotenv/config import loads environment variables from your .env file
  • This setup prepares the foundation for connecting LangChain with Devin functionality through MCP
6

Initialize Composio client

const composioApiKey = process.env.COMPOSIO_API_KEY;
const userId = process.env.COMPOSIO_USER_ID;

if (!composioApiKey) throw new Error('COMPOSIO_API_KEY is not set');
if (!userId) throw new Error('COMPOSIO_USER_ID is not set');

async function main() {
    const composio = new Composio({
        apiKey: composioApiKey as string,
        provider: new LangchainProvider()
    });
What's happening:
  • We're loading the COMPOSIO_API_KEY from environment variables and validating it exists
  • Creating a Composio instance that will manage our connection to Devin tools
  • Validating that COMPOSIO_USER_ID is also set before proceeding
7

Create a Tool Router session

const session = await composio.create(
    userId as string,
    {
        toolkits: ['devin_mcp']
    }
);

const url = session.mcp.url;
What's happening:
  • We're creating a Tool Router session that gives your agent access to Devin tools
  • The create method takes the user ID and specifies which toolkits should be available
  • The returned session.mcp.url is the MCP server URL that your agent will use
  • This approach allows the agent to dynamically load and use Devin tools as needed
8

Configure the agent with the MCP URL

const client = new MultiServerMCPClient({
    "devin_mcp-agent": {
        transport: "http",
        url: url,
        headers: {
            "x-api-key": process.env.COMPOSIO_API_KEY
        }
    }
});

const tools = await client.getTools();

const agent = createAgent({ model: "gpt-5", tools });
What's happening:
  • We're creating a MultiServerMCPClient that connects to our Devin MCP server via HTTP
  • The client is configured with a name and the URL from our Tool Router session
  • getTools() retrieves all available Devin tools that the agent can use
  • We're creating a LangChain agent using the GPT-5 model
9

Set up interactive chat interface

let conversationHistory: any[] = [];

console.log("Chat started! Type 'exit' or 'quit' to end the conversation.\n");
console.log("Ask any Devin related question or task to the agent.\n");

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    prompt: 'You: '
});

rl.prompt();

rl.on('line', async (userInput: string) => {
    const trimmedInput = userInput.trim();

    if (['exit', 'quit', 'bye'].includes(trimmedInput.toLowerCase())) {
        console.log("\nGoodbye!");
        rl.close();
        process.exit(0);
    }

    if (!trimmedInput) {
        rl.prompt();
        return;
    }

    conversationHistory.push({ role: "user", content: trimmedInput });
    console.log("\nAgent is thinking...\n");

    const response = await agent.invoke({ messages: conversationHistory });
    conversationHistory = response.messages;

    const finalResponse = response.messages[response.messages.length - 1]?.content;
    console.log(`Agent: ${finalResponse}\n`);
        
        rl.prompt();
    });

    rl.on('close', () => {
        console.log('\n👋 Session ended.');
        process.exit(0);
    });
What's happening:
  • We initialize an empty conversationHistory list to maintain context across interactions
  • A readline interface is used to continuously accept user input from the command line
  • When a user types a message, it's added to the conversation history and sent to the agent
  • The agent processes the request using the invoke() method with the full conversation history
  • Users can type 'exit', 'quit', or 'bye' to end the chat session gracefully
10

Run the application

main().catch((err) => {
    console.error('Fatal error:', err);
    process.exit(1);
});
What's happening:
  • We call the main() function to start the application

Complete Code

Here's the complete code to get you started with Devin MCP and LangChain:

import { Composio } from '@composio/core';
import { LangchainProvider } from '@composio/langchain';
import { MultiServerMCPClient } from "@langchain/mcp-adapters";  
import { createAgent } from "langchain";
import * as readline from 'readline';
import 'dotenv/config';

const composioApiKey = process.env.COMPOSIO_API_KEY;
const userId = process.env.COMPOSIO_USER_ID;

if (!composioApiKey) throw new Error('COMPOSIO_API_KEY is not set');
if (!userId) throw new Error('COMPOSIO_USER_ID is not set');

async function main() {
    const composio = new Composio({
        apiKey: composioApiKey as string,
        provider: new LangchainProvider()
    });

    const session = await composio.create(
        userId as string,
        {
            toolkits: ['devin_mcp']
        }
    );

    const url = session.mcp.url;
    
    const client = new MultiServerMCPClient({
        "devin_mcp-agent": {
            transport: "http",
            url: url,
            headers: {
                "x-api-key": process.env.COMPOSIO_API_KEY
            }
        }
    });
    
    const tools = await client.getTools();
  
    const agent = createAgent({ model: "gpt-5", tools });
    
    let conversationHistory: any[] = [];
    
    console.log("Chat started! Type 'exit' or 'quit' to end the conversation.\n");
    console.log("Ask any Devin related question or task to the agent.\n");
    
    const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout,
        prompt: 'You: '
    });

    rl.prompt();

    rl.on('line', async (userInput: string) => {
        const trimmedInput = userInput.trim();
        
        if (['exit', 'quit', 'bye'].includes(trimmedInput.toLowerCase())) {
            console.log("\nGoodbye!");
            rl.close();
            process.exit(0);
        }
        
        if (!trimmedInput) {
            rl.prompt();
            return;
        }
        
        conversationHistory.push({ role: "user", content: trimmedInput });
        console.log("\nAgent is thinking...\n");
        
        const response = await agent.invoke({ messages: conversationHistory });
        conversationHistory = response.messages;
        
        const finalResponse = response.messages[response.messages.length - 1]?.content;
        console.log(`Agent: ${finalResponse}\n`);
        
        rl.prompt();
    });

    rl.on('close', () => {
        console.log('\nSession ended.');
        process.exit(0);
    });
}

main().catch((err) => {
    console.error('Fatal error:', err);
    process.exit(1);
});

Conclusion

You've successfully built a LangChain agent that can interact with Devin through Composio's Tool Router.

Key features of this implementation:

  • Dynamic tool loading through Composio's Tool Router
  • Conversation history maintenance for context-aware responses
  • Async Python provides clean, efficient execution of agent workflows
You can extend this further by adding error handling, implementing specific business logic, or integrating additional Composio toolkits to create multi-app workflows.
TOOLS

Supported Tools

Every Devin MCP action and event your agent gets out of the box.

Ask wiki question

Ask any question about a GitHub repository's codebase and get an AI-powered answer grounded in its DeepWiki.

Devin automation manage

Manage Devin automations.

Devin billing tag manage

Manage Devin billing tags (groupings of Devin sessions for usage tracking) with a single action-based tool: list/get/create tags, assign sessions one at a time or in bulk (up to 500 per call, sent in sequential batches of 100), and read the billing tags of up to 100 sessions at once ('get_session_tags').

Devin blueprint test

Test a candidate blueprint YAML in an authoring VM: start → run initialize → fix → run initialize again (clean VM) → run maintenance → then persist with update_environment_config.

Devin code scan manage

Manage Devin code scans (sometimes referred to as "security scans" or "Devin Security Swarm").

Devin find setting

Find a Devin webapp setting and get a deep-link URL to it.

Devin knowledge manage

Manage Devin knowledge notes and suggestions via a single action-based tool.

Devin list integrations

List native integrations and MCP servers for the organization, with status and settings/install URLs.

Devin mcp server manage

Manage MCP server installations for the organization: install (from the marketplace or custom), update, delete, enable, or disable.

Devin oncall manage

Manage Devin Oncall.

Devin playbook manage

Manage Devin playbooks with a single action-based tool.

Devin review manage

Trigger a Devin Review for a pull/merge request, fetch the latest review status for one, or fetch a completed review's findings.

Devin schedule manage

Manage scheduled Devin sessions (deprecated in favor of Automations).

Devin session create

Create one or more child Devin sessions via the v3 REST API.

Devin session events

Inspect events within a Devin session — list summaries, fetch full details, or search.

Devin session gather

Wait for multiple Devin sessions to reach a settled state before returning.

Devin session interact

Consolidated tool for all interactions with a single Devin session.

Devin session search

Search and filter Devin sessions.

Devin user list

List the current organization's users, one membership kind per call.

Generate wiki

Generate a codebase wiki for a repository.

List wiki repos

List the repositories that have a DeepWiki index, i.

Read wiki contents

View documentation about a GitHub repository.

Read wiki structure

Get a list of documentation topics for a GitHub repository.

FAQ

Frequently asked questions

With a standalone Devin MCP server, the agents and LLMs can only access a fixed set of Devin tools tied to that server. However, with the Composio Tool Router, agents can dynamically load tools from Devin and many other apps based on the task at hand, all through a single MCP endpoint.

Yes, you can. LangChain fully supports MCP integration. You get structured tool calling, message history handling, and model orchestration while Tool Router takes care of discovering and serving the right Devin tools.

Yes, absolutely. You can configure which Devin scopes and actions are allowed when connecting your account to Composio. You can also bring your own OAuth credentials or API configuration so you keep full control over what the agent can do.

All sensitive data such as tokens, keys, and configuration is fully encrypted at rest and in transit. Composio is SOC 2 Type 2 compliant and follows strict security practices so your Devin data and credentials are handled as safely as possible.

Start with Devin MCP.It takes 30 seconds.

Managed auth, hosted MCP servers, and every Devin MCP tool your agent needs.Free to start.

Start building