MCP Multi-Agent Orchestration Server
Uses Ollama for local LLM inference to power multi-agent orchestration, query analysis, and result synthesis. Enables the MCP server to analyze user queries, split them into agent-specific tasks, and synthesize responses from multiple agents using locally-run language models.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Multi-Agent Orchestration Serveranalyze my patent draft and check for compliance issues"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Contract Comparisons - MCP Server with Multi-Agent Orchestration
Using WIPO to give recommendations
A Model Context Protocol (MCP) server with multi-agent orchestration capabilities, featuring a simple web interface for querying agents. This system supports multiple LLM providers (Ollama, OpenAI, Anthropic, Google) and orchestrates multiple agents to process complex queries with document management.
Features
MCP-Compliant: Implements Model Context Protocol standards
FastAPI Server: Modern async Python web framework
Multi-Agent Orchestration: Intelligent query splitting and result synthesis
PDF Document Upload: Upload and manage PDF documents with automatic text extraction
Document Selection: Manual selection via UI or automatic detection from query text
Smart Document Matching: Orchestrator automatically matches document names from queries
Flexible LLM Provider Support: Switch between Ollama (local), OpenAI, Anthropic, or Google via UI or environment variables
Model Selection: Choose from available models for your selected provider
Web Interface: Modern Next.js frontend with document management sidebar and provider/model selection
Automatic Agent Discovery: Agents are automatically discovered and registered
RESTful API: Standard HTTP endpoints for agent and document management
Quick Start
For detailed setup instructions, see SETUP.md
Prerequisites
Python 3.11+
Node.js 18+
LLM Provider (choose one or more):
Ollama (local, free): Install from ollama.ai and pull a model:
ollama pull llama3:latestOpenAI (cloud, paid): Get API key from platform.openai.com
Anthropic (cloud, paid): Get API key from console.anthropic.com
Google (cloud, paid): Get API key from ai.google.dev
Quick Installation
# 1. Clone repository
git clone <repository-url>
cd mcp-server-orchestration # or whatever you name the repository
# 2. Set up Python backend
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
# 3. Set up frontend
cd frontend
npm install
cd ..
# 4. Configure environment
cp env.example .env
# Edit .env with your LLM provider settings (see Configuration section below)
# 5. Start your LLM provider (if using Ollama)
# macOS: Open Ollama.app
# Linux: ollama serve
# For OpenAI/Anthropic/Google: Just add API key to .env
# 6. Start servers
# Terminal 1: MCP Server
source venv/bin/activate
python3 -m uvicorn backend.server.mcp_server:app --host 0.0.0.0 --port 8000
# Terminal 2: Frontend
cd frontend
npm run devAccess the frontend at http://localhost:3000
Using the System
Select LLM Provider & Model:
Use the dropdowns at the top of the chat to select your provider (Ollama, OpenAI, etc.)
Choose a model from the available models for that provider
The system will use your selection for all LLM calls in that query
Upload Documents: Click "Upload PDF" in the sidebar to upload text-based PDF files
Select Documents:
Manual: Check the box next to documents you want to query
Automatic: Just mention the document in your query (e.g., "tell me about my italy document")
Ask Questions: Type your query in the chat
The system will use your selected provider/model
Automatically uses selected documents
Internal agent searches through actual document text
External agent queries external databases (WIPO, etc.)
Architecture
Components
MCP Server (Python/FastAPI)
Orchestrates multi-agent workflows
LLM-agnostic architecture - supports Ollama, OpenAI, Anthropic, Google
Provider can be switched per-request via UI or defaults to
LLM_PROVIDERenv varRuns on port 8000
Frontend (Next.js/React)
Simple chat interface
Connects to MCP server
Runs on port 3000
Agents
Internal Agent: Searches through uploaded PDF documents using extracted text
External Agent: Queries external databases (e.g., WIPO for compliance information)
Orchestrator
Analyzes user queries using LLM
Automatically detects and matches documents from query text
Splits queries into agent-specific tasks
Synthesizes results from multiple agents
Has access to all uploaded documents for intelligent routing
Workflow
User Uploads PDF → Text Extraction (pdfplumber) → Storage (filesystem + memory)
↓
User Query + Provider/Model Selection → Orchestrator → Query Analysis (LLM)
↓
Get Available Documents List
↓
Match Documents from Query (LLM + Fallback)
↓
Determine Agents Needed
↓
Generate Optimized Queries (with document context)
↓
Execute Agents (with selected documents + LLM provider)
↓
Internal Agent: Uses document text from storage
External Agent: Queries external databases
(Both use selected LLM provider/model)
↓
Compare & Synthesize Results (LLM)
↓
Return Final AnswerDocument Management
The system supports two ways to select documents for queries:
Manual Selection: Users can select documents via checkboxes in the sidebar
Automatic Detection: Orchestrator automatically detects documents mentioned in queries
Example: "tell me about my italy document" → automatically finds "Italy-111.pdf"
Works with variations: "italian document", "japan-111", etc.
Both methods can work together (manual + auto-detected)
API Endpoints
MCP Server (Port 8000)
GET /health- Health checkGET /api/providers- Get list of configured LLM providersGET /api/models?provider=ollama- Get available models for a providerPOST /orchestrate- Process user query{ "query": "your query here", "selected_documents": ["document1.pdf", "document2.pdf"], // Optional "provider": "openai", // Optional: override default provider "model": "gpt-4" // Optional: override default model }POST /api/upload- Upload a PDF documentContent-Type:
multipart/form-dataBody:
file(PDF file)
GET /api/documents- List all uploaded documentsDELETE /api/documents/{filename}- Delete a documentGET /mcp/agents- List all registered agentsGET /mcp/resources- List all MCP resourcesPOST /discover- Trigger agent discovery
Frontend (Port 3000)
GET /- Main chat interfacePOST /api/chat- Chat endpoint (forwards to MCP server)
Project Structure
mcp-server-orchestration/ # Project root
├── backend/ # Backend MCP Server (Python/FastAPI)
│ ├── server/
│ │ └── mcp_server.py # FastAPI server with upload endpoints
│ ├── agents/
│ │ ├── internal_agent.py # Internal document agent (uses uploaded PDFs)
│ │ └── external_agent.py # External database agent
│ ├── orchestrator/
│ │ └── orchestrator.py # Query orchestration with document matching
│ ├── services/
│ │ ├── ollama_service.py # Ollama API wrapper
│ │ └── document_storage.py # PDF storage and text extraction
│ ├── uploads/ # Uploaded PDF files (created on first upload)
│ ├── interfaces/
│ │ └── agent.py # Agent interface
│ ├── registry/
│ │ └── registry.py # Agent registry
│ └── discovery/
│ └── agent_discovery.py # Auto-discovery
├── frontend/ # Frontend UI (Next.js)
│ ├── app/
│ │ ├── api/chat/route.ts # Chat API (forwards to MCP server)
│ │ ├── components/
│ │ │ ├── chat.tsx # Chat UI component
│ │ │ └── document-sidebar.tsx # Document upload and selection UI
│ │ └── page.tsx # Main page with sidebar layout
│ └── package.json
├── requirements.txt # Python dependencies
├── env.example # Environment template
├── SETUP.md # Detailed setup guide
└── README.md # This fileConfiguration
Create a .env file from env.example:
Basic Configuration
PORT=8000
LOG_LEVEL=INFO
ENV=development
ALLOWED_ORIGINS=*LLM Provider Configuration
Option 1: Ollama (Local, Free)
LLM_PROVIDER=ollama
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=llama3:latest
# Optional: Add more models for dropdown
OLLAMA_MODELS=llama3:latest,llama3.1:latest,mistral:latestOption 2: OpenAI (Cloud, Paid)
LLM_PROVIDER=openai
OPENAI_API_KEY=sk-your-api-key-here
OPENAI_MODEL=gpt-4
# Optional: Add more models for dropdown
OPENAI_MODELS=gpt-4,gpt-4-turbo,gpt-3.5-turboOption 3: Anthropic (Cloud, Paid)
LLM_PROVIDER=anthropic
ANTHROPIC_API_KEY=sk-ant-your-api-key-here
ANTHROPIC_MODEL=claude-3-5-sonnet-20241022Option 4: Google (Cloud, Paid)
LLM_PROVIDER=google
GOOGLE_API_KEY=your-api-key-here
GOOGLE_MODEL=gemini-proNote: You can configure multiple providers in .env. The UI will show all configured providers in the dropdown, and you can switch between them per-request. The LLM_PROVIDER variable sets the default provider.
Documentation
SETUP.md - Comprehensive setup guide with step-by-step instructions
WORKFLOW.md - Detailed workflow explanation including document upload, processing, and LLM provider architecture
QUICKSTART.md - Quick start guide for getting up and running in 5 minutes
FUTURE_GOALS.md - Planned improvements and next steps (LangGraph, WIPO integration, agent enhancements)
Key Features Explained
Document Upload & Management
Upload PDFs: Use the sidebar "Upload PDF" button to upload text-based PDF files
Text Extraction: pdfplumber automatically extracts text from all pages
Storage: Documents saved to
backend/uploads/(persists) + text cached in memory (fast access)Document Selection:
Manual: Check boxes in sidebar
Automatic: Mention document in query (e.g., "italy document" → finds "Italy-111.pdf")
How Documents Are Used
Upload: PDF → Text extraction → Storage
Query: User asks question (with or without mentioning document)
Detection: Orchestrator matches documents from query or uses manual selection
Processing: Internal agent retrieves document text and includes it in LLM prompt
Response: LLM searches through actual document content to answer
Example Use Cases
"What does my italy contract say?" → Auto-detects Italy-111.pdf, searches through it
"Compare my italy and japan documents" → Finds both, searches through both
"What do I need to change in my italy contract for australia?" → Uses internal agent (Italy document) + external agent (Australian compliance)
Development
Running Tests
pytestViewing Logs
MCP server logs are written to /tmp/mcp_server.log:
tail -f /tmp/mcp_server.logOr use the helper script:
./view_logs.shHelper Scripts
./start_server.sh- Start MCP server with log viewing./view_logs.sh- View MCP server logs
Troubleshooting
See SETUP.md for detailed troubleshooting guide.
Common issues:
Ollama not running: Start Ollama and verify with
curl http://localhost:11434/api/tagsOpenAI/Anthropic/Google errors: Check API key is set correctly in
.envProvider not showing in UI: Ensure API key is set in
.envfor that providerPort conflicts: Kill processes on ports 8000 or 3000
Module not found: Ensure virtual environment is activated and dependencies installed
License
[Add your license information here]
Contributing
Create a feature branch
Make your changes
Add tests
Submit a pull request
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ec49ca/NLP-project-contract-comparison'
If you have feedback or need assistance with the MCP directory API, please join our Discord server