Skip to main content

Modular MCP server with Streamable HTTP, optional OAuth 2.1, Supabase auth, Cloudflare tunnel, and creator-only access control

Project description

RobotMCP Server

A modular Model Context Protocol (MCP) server with automatic submodule integration, OAuth 2.1 authentication, Supabase user management, and Cloudflare tunnel support. Works with ChatGPT and Claude.ai.

Quick Start

Option 1: pipx (quick start)

# Install via pipx (submodules auto-download on first run)
pipx install git+https://github.com/robotmcp/robotmcp_server.git

# Run (opens browser for first-time setup)
robotmcp-server

Note: With a pipx install, you cannot add or remove modules. Use Option 2 if you need module management.

Option 2: Clone and editable install (recommended)

# Clone with submodules included
git clone --recursive https://github.com/robotmcp/robotmcp_server.git
cd robotmcp_server
pip install -e .

# Run (opens browser for first-time setup)
robotmcp-server

An editable install lets you manage modules with robotmcp-server add/remove/update.

# Verify everything is working
robotmcp-server verify

See docs/install.md for manual installation and troubleshooting.

Features

  • Submodule Auto-Discovery: Automatically finds and registers MCP tools from git submodules
  • Auto-Install Dependencies: Submodule dependencies are installed automatically at startup
  • Streamable HTTP Transport: Modern MCP transport at /mcp
  • OAuth 2.1: Full flow with PKCE and dynamic client registration
  • Cloudflare Tunnel: Secure access via {name}.robotmcp.ai
  • Creator-Only Access: Only the server creator can connect
  • Optional OAuth: Disable with ENABLE_OAUTH=false
  • Secure CLI Login: POST-based credential transfer (not URL params)
  • WSL Support: Reliable browser opening with PowerShell fallback

Project Structure

robotmcp_server/
├── main.py                    # FastAPI app entry point
├── cli.py                     # CLI daemon management
├── config.py                  # Config management (~/.robotmcp-server/)
├── setup.py                   # Browser-based login flow
├── submodule_integration.py   # Auto-discover & register submodule tools
├── submodule_deps.py          # Auto-install submodule dependencies
├── logging_config.py          # Logging with Supabase support
├── sse.py                     # Legacy SSE endpoints
├── oauth/                     # OAuth module (optional)
│   ├── endpoints.py           # OAuth routes
│   ├── middleware.py          # Token validation
│   ├── jwt_utils.py           # JWT token generation/validation
│   ├── stores.py              # Session stores
│   └── templates.py           # HTML templates
└── modules/                   # MCP tool modules (git submodules)
    ├── ros-mcp-server/        # ROS integration module
    └── test-mcp-server/       # Test/example module

Cloud Service: CLI login and tunnel creation are handled by robotmcp-cloud at https://app.robotmcp.ai.

See docs/project_plan.md for architecture details.

CLI Commands

Command Description
robotmcp-server Start server in background
robotmcp-server stop Stop server and tunnel
robotmcp-server status Show current status
robotmcp-server verify Comprehensive verification (server, tunnel, DNS, connectivity)
robotmcp-server list List installed MCP server modules with compatibility status
robotmcp-server list-tools List all available MCP tools from compatible modules
robotmcp-server add <url> Add an MCP server module (git submodule)
robotmcp-server remove <name> Remove an MCP server module
robotmcp-server update Update all MCP server modules to latest
robotmcp-server logout Clear credentials and stop

Verification Command

The verify command performs comprehensive diagnostics:

robotmcp-server verify

Checks performed:

  1. Configuration - Verifies tunnel token and configuration exist
  2. Local Server - Tests server connectivity on localhost:8766
  3. Cloudflared Process - Checks if cloudflared is running
  4. DNS Resolution - Verifies DNS record exists and resolves correctly
  5. Tunnel Endpoints - Tests endpoints through the tunnel (/, /health)

Output includes:

  • ✓/✗ status for each check
  • Detailed error messages with actionable fixes
  • Summary with pass/fail statistics
  • Next steps if issues are found

Use this command to diagnose connectivity issues, verify DNS configuration, and ensure your tunnel is working correctly.

Environment Variables

Variable Description
SUPABASE_URL Supabase project URL
SUPABASE_ANON_KEY Supabase anonymous key
SUPABASE_JWT_SECRET JWT secret for token validation
ENABLE_OAUTH Set false to disable OAuth (default: true)
ROBOTMCP_CLOUD_URL Cloud service URL (default: https://app.robotmcp.ai)

API Endpoints

Endpoint Description
GET / Server info
POST /mcp Streamable HTTP transport (recommended)
GET /sse Legacy SSE (backward compat)
/.well-known/oauth-authorization-server OAuth metadata

Connecting MCP Clients

Two endpoints are available:

Endpoint Transport Usage
/mcp Streamable HTTP Try first (recommended)
/sse Legacy SSE Use if /mcp doesn't work

Client Compatibility:

  • Claude.ai: Works with /mcp (recommended)
  • ChatGPT: Works with /mcp (recommended)
  • Legacy clients: Use /sse if /mcp doesn't work

Example URL:

https://{your-name}.robotmcp.ai/mcp

See docs/workflow.md for connection flow diagrams.

Adding MCP Submodules

The server automatically discovers and integrates MCP tools from git submodules:

# Add a module using the CLI
robotmcp-server add https://github.com/example/my-mcp-tools.git

# Or add tracking a specific branch
robotmcp-server add -b develop https://github.com/example/my-mcp-tools.git

# List installed modules and their compatibility status
robotmcp-server list

# List all available tools
robotmcp-server list-tools

# Update all modules to latest
robotmcp-server update

# Remove a module
robotmcp-server remove my-mcp-tools

Your submodule needs:

  1. A pyproject.toml with a package name
  2. An integration.py with a register(mcp, **kwargs) function

Compatibility: Modules without an integration module will show as "not compatible" in list and list-tools commands. The server checks for compatibility at startup and warns about incompatible modules.

# my_mcp_tools/integration.py
from fastmcp import FastMCP

def register(mcp: FastMCP, **kwargs) -> None:
    @mcp.tool()
    def my_tool(param: str) -> str:
        """Process a parameter."""
        return f"Result: {param}"

See docs/submodule-integration.md for the complete guide including:

  • Full integration.py examples with configuration
  • How to organize tools, resources, and prompts
  • Environment variable configuration
  • Testing your submodule

Documentation

Changelog

See CHANGELOG.md for version history.

License

Copyright (c) 2025 Contoro. All rights reserved.

This software is proprietary and confidential. Unauthorized copying, modification, distribution, or use of this software is strictly prohibited without express written permission.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

robotmcp_server-2.2.0.tar.gz (100.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

robotmcp_server-2.2.0-py3-none-any.whl (100.6 MB view details)

Uploaded Python 3

File details

Details for the file robotmcp_server-2.2.0.tar.gz.

File metadata

  • Download URL: robotmcp_server-2.2.0.tar.gz
  • Upload date:
  • Size: 100.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for robotmcp_server-2.2.0.tar.gz
Algorithm Hash digest
SHA256 bf66a321b36e17a5deb0ab16da3227db1d57ae939b2dc231cbff8ad2a32ff729
MD5 6c9803e34ebbff51772d4e1b14a77d24
BLAKE2b-256 a2d96b4c20b430f191a6114b5b6364f446f718a8a98b481a2fd62b9996beb7b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for robotmcp_server-2.2.0.tar.gz:

Publisher: publish_pypi.yml on robotmcp/robotmcp_server

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file robotmcp_server-2.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for robotmcp_server-2.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c14a5935a35d443de52416881f21257df70cd41411cbe3a64937b3cc0120ae09
MD5 3591584a9bd63682ccc94be8e51623bb
BLAKE2b-256 cbf1624fbd94505b7f10a01a657b62064ba7a85e21ea5f3e33e1321383d50046

See more details on using hashes here.

Provenance

The following attestation bundles were made for robotmcp_server-2.2.0-py3-none-any.whl:

Publisher: publish_pypi.yml on robotmcp/robotmcp_server

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page