nestjs-langgraph-mcp

nestjs-langgraph-mcp

Experimental MCP server built with NestJS and LangGraph, enabling tool execution and agent workflows via stdio transport. Supports OpenAI and Ollama models for flexible agent orchestration.

Category
Visit Server

README

NestJS + LangGraph MCP POC

A simple proof-of-concept MCP server built with NestJS, using LangGraph as the orchestration layer for tool execution and agent workflows.

Features

  • NestJS application context (no HTTP server required)
  • MCP server over stdio transport
  • LangGraph StateGraph workflow with nodes:
    • route (model-based tool routing)
    • executeTool (executes selected tool)
    • respond (final answer generation)
  • Model provider switch:
    • OpenAI (@langchain/openai)
    • Ollama local model (@langchain/ollama, default qwen2.5:1.5b)

Quick Start

  1. Install dependencies:
npm install
  1. Configure environment:
cp .env.example .env
  1. Build and run:
npm run build
npm start

The MCP server starts on stdio.

Model Selection

Default provider is read from MODEL_PROVIDER.

  • Use OpenAI:

    • MODEL_PROVIDER=openai
    • set OPENAI_API_KEY
    • optional OPENAI_MODEL (default gpt-4o-mini)
  • Use Ollama qwen2.5:1.5b:

    • MODEL_PROVIDER=ollama
    • run Ollama locally and pull model:
ollama pull qwen2.5:1.5b
  • optional OLLAMA_BASE_URL and OLLAMA_MODEL

You can override provider/model per MCP tool call (run_agent).

MCP Tools

  • health: returns server status and default model config
  • run_agent: runs the LangGraph workflow
    • input:
      • prompt (string, required)
      • provider (openai or ollama, optional)
      • model (string, optional)

Example MCP Client Config (Claude Desktop style)

{
  "mcpServers": {
    "nestjs-langgraph": {
      "command": "node",
      "args": ["/absolute/path/to/langraph-mcp/dist/main.js"],
      "env": {
        "MODEL_PROVIDER": "ollama",
        "OLLAMA_BASE_URL": "http://localhost:11434",
        "OLLAMA_MODEL": "qwen2.5:1.5b"
      }
    }
  }
}

LangGraph Demo Suite

This repo includes agents and tools built using proper LangGraph.js patterns:

  • Tools: Defined using tool() from @langchain/core/tools with Zod schemas
  • Agents: Built with createReactAgent or custom StateGraph with MessagesAnnotation
  • Tool Execution: Uses ToolNode and toolsCondition from @langchain/langgraph/prebuilt
  • LLM Binding: Tools bound to LLM via .bindTools(tools)

Demo Capabilities

Demo Capability
01-reasoning Basic StateGraph workflow
02-parallel Parallel tool calls via ToolNode
03-handoffs Agent-to-agent handoffs via coordinator
04-hitl Human-in-the-loop approval workflow
05-structured Structured output with Zod validation
06-tracing Execution tracing through graph
07-discovery Tool discovery and registry
08-planning Multi-step planning loop
09-failure Error handling and retry
10-local Local Ollama model integration

Project Layout

demos/
├── demo-runner.ts
├── 01-reasoning.demo.ts
├── 02-parallel.demo.ts
├── 03-handoffs.demo.ts
├── 04-hitl.demo.ts
├── 05-structured-output.demo.ts
├── 06-tracing.demo.ts
├── 07-tool-discovery.demo.ts
├── 08-multi-step-planning.demo.ts
├── 09-failure-handling.demo.ts
├── 10-local-model.demo.ts
└── utils/demo-utils.ts

agents/
├── agent.factory.ts
├── tools.ts
├── coordinator.agent.ts
├── employee.agent.ts
├── analytics.agent.ts
├── reporting.agent.ts
├── approval.agent.ts
└── model.config.ts

Prerequisites

Ensure Ollama is running with a tool-capable model:

# qwen2.5:1.5b supports tool calling (recommended)
ollama pull qwen2.5:1.5b
ollama serve

Note: Models like qwen2.5:1.5b do not support tool calling. Use qwen2.5:1.5b, llama3.1, mistral, or qwen2.5 for full demo functionality.

Run all demos:

npm run demo

Run one demo:

npm run demo:one -- 03

Optional HITL switch for demo 04:

DEMO_REVIEW_DECISION=approved npm run demo:one -- 04

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured