Labsco
Mvp2o-ai logo

MCP IDE Bridge

โ˜… 2

from Mvp2o-ai

An open-source messaging server for client-to-client communication using MCP HTTP Streamable messaging.

๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅโœ“ VerifiedFreeQuick setup

MCP IDE Bridge

๐ŸŽฌ Demo Video

FRONT END WEB APP
CURSOR IDE
BACK END API
CURSOR IDE
MCP IDE Bridge Demo

Click the image above to watch the live demo of MCP IDE Bridge in action!
This shows two Cursor IDEs (front end and back end) collaborating in real time via the IDE Bridge.

A stateless, open source MCP (Model Context Protocol) HTTP Streamable server that enables client-to-client communication between IDEs and development tools. This opens up a new dimension of collaboration beyond traditional MCP client-server interactions.

๐Ÿš€ Perfect for: Cross-IDE collaboration, team development workflows, AI agent coordination, and seamless tool integration.

๐ŸŒŸ What Makes This Special?

Traditional MCP vs MCP IDE Bridge

Traditional MCPMCP IDE Bridge
Client โ†” ServerClient โ†” Server โ†” Client
One-way communicationBidirectional messaging
Tool execution onlyReal-time collaboration
Single IDE focusMulti-IDE coordination

Real-World Use Cases

๐ŸŽฏ IDE Collaboration

  • Cursor โ†” Cursor: Share code snippets, debugging sessions, or pair programming
  • Cursor โ†” VS Code: Cross-editor communication and file sharing
  • Windsurf โ†” Any IDE: AI agent coordination across different development environments
  • Team Workflows: Coordinate multiple developers working on the same project

๐Ÿค– AI Agent Coordination

  • Agent-to-agent communication for complex workflows
  • Distributed AI processing across multiple tools
  • Human-in-the-loop collaboration with AI assistants

๐Ÿ—๏ธ Architecture

Client-to-Client Communication

IDE A (Cursor)  โ†โ†’  MCP IDE Bridge  โ†โ†’  IDE B (VS Code)
     โ†‘                    โ†‘                    โ†‘
  MCP Client         Message Relay        MCP Client

Key Components

  • Message Relay: Stateless server that routes messages between clients
  • Client Registry: Dynamic client discovery and registration
  • Message Queues: Per-recipient queues with automatic expiration
  • HTTP Streamable: Latest MCP transport for real-time communication

๐Ÿ”— Non-IDE Clients (LangChain, mcp-use, Custom Apps)

Overview

Non-IDE clients use the exact same MCP protocol as IDE clients. The only difference is how they provide their configuration:

  • IDE clients: Read mcp_recipients.json from local file system
  • Non-IDE clients: Provide recipients_config as parameter to MCP tools

No registration, no REST endpoints, no special setup - just parameter injection!

This enables seamless integration with frameworks like LangChain, mcp-use, custom Python scripts, and web applications.

Architecture

Non-IDE Client (LangChain/mcp-use)
         โ†“
    Client wrapper adds recipients_config parameter
         โ†“  
    Standard MCP Tools (same as IDE clients)
         โ†“
    MCP IDE Bridge โ†โ†’ IDE Clients

Setup - Client Wrapper Approach

Create a wrapper that automatically injects your configuration:

LangChain Integration:

from mcp import Client

class MCPClientWrapper:
    def __init__(self, mcp_url, recipients_config):
        self.client = Client(mcp_url)
        self.recipients_config = recipients_config
        self.my_id = recipients_config.get("my_id")
    
    def get_my_identity(self):
        # Inject recipients_config parameter
        return self.client.call_tool("get_my_identity", {
            "client_id": self.my_id,
            "recipients_config": self.recipients_config
        })
    
    def send_message(self, recipient_ids, messages):
        return self.client.call_tool("send_message_without_waiting", {
            "sender_id": self.my_id,
            "recipient_ids": recipient_ids if isinstance(recipient_ids, list) else [recipient_ids],
            "messages": messages if isinstance(messages, list) else [messages]
        })
    
    def get_messages(self):
        return self.client.call_tool("get_messages", {
            "client_id": self.my_id
        })

# Usage
recipients_config = {
    "my_id": "my-langchain-app",
    "recipients": {
        "frontend_cursor": {
            "name": "Frontend Team Cursor",
            "description": "Frontend development in Cursor IDE"
        },
        "backend_vscode": {
            "name": "Backend Team VS Code", 
            "description": "Backend API development in VS Code"
        }
    },
    "server_info": {
        "host": "localhost",
        "port": 8111
    }
}

# Initialize wrapper
mcp_client = MCPClientWrapper("http://localhost:8111/mcp/", recipients_config)

# Use exactly like IDE clients
identity = mcp_client.get_my_identity()
print(identity)

response = mcp_client.send_message(["frontend_cursor"], ["Please update the user authentication flow"])
messages = mcp_client.get_messages()

mcp-use Integration:

import mcp_use

# Same wrapper pattern  
wrapper = MCPClientWrapper("http://localhost:8111/mcp/", recipients_config)
wrapper.send_message(["team_cursor"], ["Task completed!"])

Real-World Implementation: Proxy Pattern

For production web applications, the recommended approach is a proxy/interceptor pattern that selectively handles messaging tools:

Next.js API Route Example (dyson_frontend implementation):

// app/api/mcp-proxy/route.ts
import { NextRequest } from 'next/server'

// Hardcoded configuration (no file dependencies)
const MCP_RECIPIENTS_CONFIG = {
  my_id: 'dyson_frontend',
  recipients: {
    'miles_mcp_server': { name: 'Miles Primary MCP Server', description: 'Main backend API' },
    'mcpresearchserver': { name: 'MCP Research Server', description: 'Research tools' },  
    'mcp-ide-bridge': { name: 'IDE Bridge', description: 'Cross-IDE communication' }
  },
  server_info: { host: 'localhost', port: 8111 }
}

// Only intercept these 4 messaging tools (99% of traffic passes through)
const INTERCEPTED_TOOLS = ['send_message_without_waiting', 'get_messages', 'get_my_identity', 'checkin_client']

export async function POST(request: NextRequest) {
  const { tool_name, arguments: toolArgs, server_id } = await request.json()
  
  // Only intercept messaging tools for ide-bridge
  if (server_id === 'ide-bridge' && INTERCEPTED_TOOLS.includes(tool_name)) {
    return handleMessagingTool(tool_name, toolArgs)
  }
  
  // Forward everything else unchanged
  return forwardToMcp(server_id, tool_name, toolArgs)
}

async function handleMessagingTool(toolName: string, toolArgs: any) {
  switch (toolName) {
    case 'get_my_identity':
      // Override with our config as markdown
      return Response.json(formatConfigAsMarkdown(MCP_RECIPIENTS_CONFIG))
      
    case 'send_message_without_waiting':
      // Inject sender_id and validate recipients
      return forwardToMcp('ide-bridge', toolName, {
        ...toolArgs,
        sender_id: MCP_RECIPIENTS_CONFIG.my_id
      })
      
    case 'get_messages':
      // Inject client_id
      return forwardToMcp('ide-bridge', toolName, {
        ...toolArgs,
        client_id: MCP_RECIPIENTS_CONFIG.my_id
      })
      
    case 'checkin_client':
      // Inject client identity
      return forwardToMcp('ide-bridge', toolName, {
        client_id: MCP_RECIPIENTS_CONFIG.my_id,
        name: 'Dyson Frontend App',
        capabilities: 'Web application for AI agent coordination'
      })
  }
}

function formatConfigAsMarkdown(config: any): string {
  const recipientRows = Object.entries(config.recipients).map(([id, info]: [string, any]) => 
    `| ${id} | ${info.description} | No URL |`
  ).join('\n')
  
  return `# ๐Ÿ†” MCP Client Identity & Recipients

## Your Client ID: \`${config.my_id}\`

## Available Recipients

| Client ID | Description | URL |
|-----------|-------------|-----|
${recipientRows}

## ๐Ÿ“‹ Available Tools

### Core Messaging Tools

| Tool | Description | Use Case |
|------|-------------|----------|
| `checkin_client` | Register your presence | Announce availability |
| `send_message_without_waiting` | Fire & forget messaging | **ONLY** messaging method |
| `get_messages` | **๐Ÿ“ฌ ESSENTIAL** - Check for replies | **Required** after messaging |
| `get_my_identity` | Get configuration help | Setup assistance |
| `get_active_sessions` | View active connections | Monitor team activity |

### ๐Ÿš€ Messaging Workflow

**MESSAGING PATTERN**: Fire-and-forget + get_messages for efficient communication:

**1. Send Messages (Fire & Forget):**
```bash
# Send to one or more recipients - INSTANT return, no blocking!
send_message_without_waiting(
  sender_id="alice_cursor",
  recipient_ids=["bob_vscode", "charlie_windsurf", "diana_jetbrains"],  
  messages=["Meeting in 5 minutes! Please confirm attendance."]
)

2. Check for Replies:

# Get replies from recipients
get_messages("alice_cursor")
# Returns responses from bob_vscode, charlie_windsurf, diana_jetbrains

Message Patterns:

# Different messages to different recipients
send_message_without_waiting(
  sender_id="alice_cursor", 
  recipient_ids=["bob_vscode", "charlie_windsurf"],
  messages=["Review auth module please", "Check UI components for responsiveness"]
)

# Single recipient
send_message_without_waiting(
  sender_id="alice_cursor",
  recipient_ids=["bob_vscode"],
  messages=["Quick question about the API endpoint"]
)

# Then check for replies
get_messages("alice_cursor")

Benefits:

  • โœ… No Blocking: Instant return, no waits
  • โœ… Scalable: Works for one or more recipients efficiently
  • โœ… Fast: No timeouts or blocking calls
  • โœ… Better UX: Smooth, responsive messaging experience

Example Workflows

Team Collaboration

# Developer A checks in
checkin_client("alice_cursor", "Alice", "Working on auth module")

# Developer A messages recipients
send_message_without_waiting("alice_cursor", 
  ["bob_vscode", "charlie_windsurf", "diana_jetbrains"],
  ["Need code review on auth module - who's available?"])

# Developer A checks for replies
get_messages("alice_cursor")
# Returns: "I can help! - bob_vscode", "Busy until 3pm - charlie_windsurf"

AI Agent Coordination

# AI Agent 1 announces completion
send_message_without_waiting("ai_agent_1", 
  ["ai_agent_2", "ai_agent_3", "human_reviewer"],
  ["Code review complete - ready for next phase"])

# Check for coordination responses
get_messages("ai_agent_1")
# Returns responses from recipients

๐Ÿ”’ Security Considerations

Current State (Desktop Use)

โœ… Suitable for:

  • Local development teams
  • Personal projects
  • Desktop-only workflows
  • Trusted network environments

โš ๏ธ Limitations:

  • No authentication beyond client IDs
  • No encryption of messages
  • No access control
  • No audit logging

๐Ÿ” Security Model:

  • Client IDs act as simple credentials
  • Messages stored in memory only
  • 5-minute automatic expiration
  • No persistent storage

Enterprise Solution

For production use, security, and team collaboration, we offer MilesDyson.ai - an enterprise-grade Agentic Platform as a Service (aPaaS) that addresses all security concerns:

  • ๐Ÿ” Enterprise Authentication: SSO, RBAC, and audit trails
  • ๐Ÿ›ก๏ธ End-to-End Encryption: All messages encrypted in transit and at rest
  • ๐ŸŒ Global Infrastructure: Multi-region deployment with 99.9% uptime
  • ๐Ÿ‘ฅ Team Management: User management, permissions, and collaboration tools
  • ๐Ÿ“Š Analytics: Usage insights and performance monitoring
  • ๐Ÿ”ง Enterprise Support: Dedicated support and custom integrations

Learn More โ†’ MilesDyson.ai

๐Ÿงช Testing

NEW! We've included a comprehensive MCP test harness (test_mcp_client.py) that makes testing all MCP tools easy and reliable:

# Test identity and configuration
python test_mcp_client.py get_my_identity

# Check in as a client
python test_mcp_client.py checkin_client --client_id "test-client" --name "Test Client" --capabilities "Testing tools"

# Send fire-and-forget messages
python test_mcp_client.py send_message_without_waiting \
  --sender_id "test-client" \
  --args '{"recipient_ids": ["target-client"], "messages": ["Hello from test harness!"]}'

# NEW! Broadcast messages (fire & forget)
# Same message to multiple recipients
python test_mcp_client.py send_message_without_waiting \
  --sender_id "test-client" \
  --args '{"recipient_ids": ["alice", "bob", "charlie"], "messages": ["Team meeting in 5 minutes!"]}'

# Different messages to different recipients  
python test_mcp_client.py send_message_without_waiting \
  --sender_id "test-client" \
  --args '{"recipient_ids": ["alice", "bob"], "messages": ["Review the auth code", "Check the UI components"]}'

# Get pending messages
python test_mcp_client.py get_messages --client_id "test-client"

# Check server status
python test_mcp_client.py get_active_sessions

# Use custom JSON arguments
python test_mcp_client.py checkin_client --args '{"client_id": "custom", "name": "Custom Client"}'

Features:

  • โœ… Proper MCP Headers: Handles text/event-stream and streaming responses correctly
  • โœ… Beautiful Output: Clean markdown display with raw JSON debugging
  • โœ… All Tools Supported: Test every MCP tool with proper argument handling
  • โœ… Flexible Arguments: Use individual flags or JSON for complex parameters
  • โœ… Error Handling: Clear error messages and troubleshooting info

Installation:

# Install required dependency
pip install requests

# Run any test
python test_mcp_client.py <tool_name> [arguments]

Quick Connection Test

# Test server connectivity
curl -X GET http://localhost:8111/api/sessions

# Test MCP client connection
cd examples/client
python test_connection.py --mcp-localhost-port 8111

Reference Client

The project includes a reference MCP client for testing:

cd examples/client
pip install -r requirements.txt
python client.py --mcp-localhost-port 8111

๐Ÿ—๏ธ Development

Project Structure

src/mcp_messaging/
โ”œโ”€โ”€ server.py          # Main server implementation
โ”œโ”€โ”€ models.py          # Data models
โ””โ”€โ”€ queue_backends.py  # Queue implementations

examples/
โ”œโ”€โ”€ client/            # Reference MCP client
โ”œโ”€โ”€ configs/           # Project-specific configurations
โ”œโ”€โ”€ multi-project-setup/  # Multi-project IDE communication examples
โ”‚   โ”œโ”€โ”€ README.md      # Comprehensive setup guide
โ”‚   โ”œโ”€โ”€ frontend-cursor.json
โ”‚   โ”œโ”€โ”€ backend-vscode.json
โ”‚   โ”œโ”€โ”€ rag-windsurf.json
โ”‚   โ”œโ”€โ”€ devops-jetbrains.json
โ”‚   โ””โ”€โ”€ ...            # More project examples (filenames for reference only)
โ””โ”€โ”€ reference/         # Additional examples

test_mcp_client.py     # MCP test harness for command-line testing
mcp_recipients.json    # Example configuration (each project gets ONE file)
requirements.txt       # Python dependencies
Dockerfile            # Container support

Note: Each project gets ONE mcp_recipients.json file with its own unique ID and recipient list. The example filenames in multi-project-setup/ are just for reference - your actual file must be named mcp_recipients.json in each project root.

Local Development

# Clone and setup
git clone https://github.com/your-username/mcp-ide-bridge.git
cd mcp-ide-bridge

# Create and activate virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

# Install package in editable mode (REQUIRED for Python to find mcp_messaging module)
pip install -e .

# Run server
python -m mcp_messaging.server --port 8111

โš ๏ธ Important: The pip install -e . step is required for Python to properly find the mcp_messaging module. Without this, you'll get ModuleNotFoundError: No module named 'mcp_messaging'.

๐Ÿค Contributing

We welcome contributions! Please see CONTRIBUTING.md for:

  • Development setup
  • Code style guidelines
  • Testing procedures
  • Pull request process

๐Ÿ“„ License

MIT License - see LICENSE for details.

๐Ÿš€ Enterprise Solution

Ready for production use?

MilesDyson.ai provides enterprise-grade MCP IDE Bridge with:

  • ๐Ÿ” Enterprise Security: SSO, encryption, audit trails
  • ๐ŸŒ Global Infrastructure: Multi-region, high availability
  • ๐Ÿ‘ฅ Team Management: User management and collaboration tools
  • ๐Ÿ“Š Analytics & Monitoring: Usage insights and performance tracking
  • ๐Ÿ”ง Enterprise Support: Dedicated support and custom integrations

Perfect for:

  • Development teams
  • Enterprise environments
  • Production deployments
  • Multi-organization collaboration

Built with MCP HTTP Streamable transport โ€ข Powered by FastMCP โ€ข Made with โค๏ธ by MVP2o.ai