langchaingo_mcp_adapter

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 13, 2025 License: MIT Imports: 8 Imported by: 0

README

LangChainGo MCP Adapter

A Go adapter that bridges LangChain Go tools with Model Context Protocol (MCP) servers.

Overview

This adapter allows you to use tools defined on an MCP server with the LangChain Go library. It implements the necessary interfaces to integrate MCP tools seamlessly with LangChain Go's agent infrastructure.

Features

  • Connect to any MCP server
  • Automatically discover MCP tools from a specified MCP server and make them available to LangChain Go
  • Wrap MCP tools as LangChain Go tools

Installation

go get github.com/i2y/langchaingo-mcp-adapter

Usage

package main

import (
    "context"
    "log"
    "os"

    "github.com/i2y/langchaingo-mcp-adapter"
    "github.com/mark3labs/mcp-go/client"
    "github.com/tmc/langchaingo/agents"
    "github.com/tmc/langchaingo/chains"
    "github.com/tmc/langchaingo/llms/googleai"
    "github.com/tmc/langchaingo/tools"
)

func main() {
    // Create an MCP client using stdio
    mcpClient, err := client.NewStdioMCPClient(
        "./an-mcp-server",  // Path to an MCP server executable
        nil,                // Additional environment variables if needed
    )
    if err != nil {
        log.Fatalf("Failed to create MCP client: %v", err)
    }
    defer mcpClient.Close()

    // Create the adapter
    adapter, err := langchaingo_mcp_adapter.New(mcpClient)
    if err != nil {
        log.Fatalf("Failed to create adapter: %v", err)
    }

    // Get all tools from MCP server
    mcpTools, err := adapter.Tools()
    if err != nil {
        log.Fatalf("Failed to get tools: %v", err)
    }

    ctx := context.Background()

    // Create a Google AI LLM client
    llm, err := googleai.New(
        ctx,
        googleai.WithDefaultModel("gemini-2.0-flash"),
        googleai.WithAPIKey(os.Getenv("GOOGLE_API_KEY")),
    )
    if err != nil {
        log.Fatalf("Create Google AI client: %v", err)
    }

    // Create a agent with the tools
    agent := agents.NewOneShotAgent(
        llm,
        mcpTools,
        agents.WithMaxIterations(3),
    )
    executor := agents.NewExecutor(agent)

    // Use the agent
    question := "Can you help me analyze this data using the available tools?"
    result, err := chains.Run(
        ctx,
        executor,
        question,
    )
    if err != nil {
        log.Fatalf("Agent execution error: %v", err)
    }

    log.Printf("Agent result: %s", result)
}

Example Applications

See the example directory for complete examples:

  • example/agent: Demonstrates how to use the adapter with various LLM providers (Google AI, OpenAI, Anthropic)
  • example/server: A minimal MCP server example that provides a URL fetching tool

The example agent supports multiple LLM providers:

  • Google AI (Gemini): Set GOOGLE_API_KEY
  • OpenAI: Set OPENAI_API_KEY
  • Anthropic (Claude): Set ANTHROPIC_API_KEY

The example is cross-platform and works on Windows, macOS, and Linux. The example automatically builds and runs the MCP server from source. See the example README for detailed setup instructions.

The mcp-curl server in this sample is based on the code from this blog.

Requirements

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Documentation

Overview

Package langchaingo_mcp_adapter provides an adapter between LangChain Go and MCP servers.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewToolForTesting

func NewToolForTesting(name, description string, inputSchema map[string]any, client MCPClientInterface) (langchaingoTools.Tool, error)

NewToolForTesting creates an mcpTool instance for testing purposes. This function is for testing only and should not be used in production applications.

Types

type MCPAdapter

type MCPAdapter struct {
	// contains filtered or unexported fields
}

MCPAdapter adapts an MCP client to the LangChain Go tools interface.

func New

func New(client MCPClientInterface, opts ...Option) (*MCPAdapter, error)

New creates a new MCPAdapter instance with the given MCP client. It initializes the connection with the MCP server. Optional parameters can be passed using functional options.

func (*MCPAdapter) Tools

func (a *MCPAdapter) Tools() ([]langchaingoTools.Tool, error)

Tools returns a list of all available tools from the MCP server. Each tool is wrapped as a langchaingoTools.Tool.

type MCPClientInterface

type MCPClientInterface interface {
	Initialize(ctx context.Context, request mcp.InitializeRequest) (*mcp.InitializeResult, error)
	ListTools(ctx context.Context, request mcp.ListToolsRequest) (*mcp.ListToolsResult, error)
	CallTool(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error)
}

MCPClientInterface defines the interface for MCP client operations used by this adapter. This interface is a subset of client.MCPClient that includes only the exported methods we need. The client.MCPClient from github.com/mark3labs/mcp-go/client package implements this interface.

type Option

type Option func(*MCPAdapter)

Option defines a functional option type for configuring MCPAdapter.

func WithToolTimeout

func WithToolTimeout(timeout time.Duration) Option

WithToolTimeout sets the timeout for tool calls.

Directories

Path Synopsis
example
agent command
server command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL