Skip to main content

Connecting MCP Servers

Learn how to connect different types of MCP servers to your vMCP instance.

Overview

MCP servers can use different transport types:

  • stdio - Command-line programs (most common)
  • HTTP - REST API servers
  • SSE - Server-Sent Events
  1. Open http://localhost:8000
  2. Click "Connections" in the navigation menu
  3. You'll see all your configured MCP servers

Adding a Stdio MCP Server

Stdio servers are command-line programs that communicate via stdin/stdout.

Example: Filesystem MCP

The filesystem MCP provides file operations.

Configuration:

{
"name": "filesystem",
"description": "Local filesystem access",
"transport_type": "stdio",
"config": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/path/to/workspace"
]
}
}

Provides:

  • list_directory - List files in a directory
  • read_file - Read file contents
  • write_file - Write to a file
  • search_files - Search for files

Example: GitHub MCP

Access GitHub repositories and issues.

Configuration:

{
"name": "github",
"description": "GitHub integration",
"transport_type": "stdio",
"config": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-github"
],
"env": {
"GITHUB_TOKEN": "your_token_here"
}
}
}

Provides:

  • create_issue - Create GitHub issue
  • list_issues - List repository issues
  • get_file_contents - Get file from repo
  • push_files - Push changes to repo

Example: PostgreSQL MCP

Database access via MCP.

Configuration:

{
"name": "postgres",
"description": "PostgreSQL database access",
"transport_type": "stdio",
"config": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres"
],
"env": {
"DATABASE_URL": "postgresql://user:pass@localhost/db"
}
}
}

Adding an HTTP MCP Server

HTTP servers expose MCP protocol over REST endpoints.

Configuration:

{
"name": "api-server",
"description": "Custom API MCP server",
"transport_type": "http",
"config": {
"url": "https://api.example.com/mcp",
"headers": {
"Authorization": "Bearer your-token"
}
}
}

Adding an SSE MCP Server

Server-Sent Events for real-time updates.

Configuration:

{
"name": "realtime-server",
"description": "Real-time MCP server",
"transport_type": "sse",
"config": {
"url": "https://sse.example.com/mcp/events"
}
}

Testing the Connection

After adding a server:

  1. Click the "Connect" button on the server card
  2. Status will change to "Connected" if successful
  3. Click "Test" to verify functionality

Status Indicators

  • Connected (Green) - Server is active and responding
  • Disconnected (Gray) - Server is not connected
  • Auth Required (Yellow) - OAuth or authentication needed
  • Error (Red) - Connection failed

Managing Environment Variables

For sensitive data like API keys:

Option 1: Environment File

Create a .env file in the backend directory:

GITHUB_TOKEN=ghp_your_token_here
DATABASE_URL=postgresql://user:pass@localhost/db
OPENAI_API_KEY=sk-your-key-here

Reference in server config:

{
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
}

Option 2: Direct Configuration

Store directly in the server config (less secure, not recommended for production):

{
"env": {
"GITHUB_TOKEN": "ghp_your_token_here"
}
}

Official Servers

From @modelcontextprotocol:

  • server-filesystem - File system operations
  • server-github - GitHub integration
  • server-postgres - PostgreSQL database
  • server-sqlite - SQLite database
  • server-memory - Key-value memory storage

Community Servers

  • AWS - S3, Lambda, EC2 operations
  • Google Cloud - GCS, BigQuery, Cloud Functions
  • Slack - Messaging and channel management
  • Jira - Issue tracking
  • Confluence - Documentation access

Building Custom MCP Servers

You can build custom servers using FastMCP:

from fastmcp import FastMCP

mcp = FastMCP("My Custom Server")

@mcp.tool()
def my_tool(param: str) -> str:
"""My custom tool"""
return f"Result: {param}"

if __name__ == "__main__":
mcp.run()

Run your custom server:

{
"name": "custom-server",
"transport_type": "stdio",
"config": {
"command": "python",
"args": ["my_server.py"]
}
}

Troubleshooting

Connection Fails

  1. Check the command is correct and installed
  2. Verify environment variables are set
  3. Check logs in the Stats page
  4. Ensure required permissions (file access, API keys, etc.)

Server Not Responding

  1. Click "Disconnect" then "Connect" to restart
  2. Check if the process is running: ps aux | grep [server-name]
  3. Review error logs in backend console

Tools Not Appearing

  1. Ensure server is "Connected"
  2. Click "Refresh" on the Connections page
  3. Check server capabilities in the API response

Next Steps