RezaImany/OrbitRemoteMCP
If you are the rightful owner of OrbitRemoteMCP and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
OrbitRemoteMCP is a streamable HTTP-only Model Context Protocol (MCP) server framework designed for secure, efficient, and flexible remote deployments.
OrbitRemoteMCP
HTTP-only, streamable MCP framework with secure auth, rate limiting, session tokens, and a drop-in plugin model. Includes optional sample code (OpenWeather tool, simple resource) purely as reference—you can remove or replace them freely.
Use it as the MCP backend for the OrbitAgents orchestrator or any MCP client that wants HTTP transport with auth and streaming.
Highlights
- Streamable HTTP transport (no stdio), ready for remote deployment.
- Auth: API key + signed session tokens, CORS, body-size and rate limits.
- Auto-discovers built-in tools/resources; optional entrypoints or
ORBIT_MODULESfor plugins. - Compatibility
/mcpendpoint for JSON-RPC over HTTP (no special Accept header required). - Minimal dependencies (FastAPI/Starlette core, Pydantic v2, httpx async client).
Fits well for
| Scenario | How this repo helps | Pointer |
|---|---|---|
| OrbitAgents Monitoring Assistant | Host observability tools/resources behind auth + streaming for the OrbitAgents monitoring use case | https://github.com/RezaImany/OrbitAgents/tree/main/use-cases/monitoring-assistant |
| Multi-tenant MCP gateway | Expose internal tools/resources to any MCP client with rate limits and session tokens | docs/ARCHITECTURE.md |
| SaaS/enterprise plugins | Offer MCP-compatible tools/resources over HTTP without stdio transport | Endpoints below (/tools, /mcp) |
Quick start (local)
Copy the sample env and fill in your values (the real .env stays untracked):
cp .env.example .env
pip install -e .
python -m orbit_remote_mcp --host 0.0.0.0 --port 8000 --transport streamable-http
Quick start (Docker)
Copy .env.example to .env, set the values you need, then start:
cd OrbitRemoteMCP
docker compose up --build
Container exposes 8000 by default.
Pair with OrbitAgents
- Set
MCP_SERVER_URLto your deployment's/mcpendpoint in the OrbitAgents.env. - Set
MCP_API_KEYto your API key (or a session token from/sessions). - Run OrbitAgents; tools/resources from this service will be discovered automatically.
Configuration
Only set what you need; sane defaults are included.
| Variable | Default | Purpose |
|---|---|---|
| ORBIT_HOST | 0.0.0.0 | Bind host |
| ORBIT_PORT | 8000 | Bind port |
| ORBIT_REQUIRE_AUTH | true | Enforce auth |
| ORBIT_AUTH_KEY | (none; required) | API key and token signing secret |
| LOG_LEVEL | INFO | Logging level |
| OPENWEATHER_API_KEY | (none) | Only needed if you keep/use the OpenWeather sample |
| ORBIT_ALLOWED_ORIGINS | * | CORS allowlist |
| ORBIT_RATE_LIMIT | 60 | Requests per minute per client |
| ORBIT_MAX_BODY_BYTES | 1048576 | Max request body size |
| ORBIT_SESSION_TTL_SECONDS | 1800 | Session token lifetime |
| ORBIT_MODULES | (auto) | Custom plugin modules (comma-separated) |
Endpoints
GET /diagnostics/healthcheck– livenessGET /diagnostics/ready– readinessPOST /sessions– returns{ session_token, expires_in }(auth required)GET /tools– tool schemas (auth required)GET /.well-known/mcp.json– discovery infoPOST /mcp– JSON-RPC (compat) fortools/listandtools/call(auth required)
Calling tools (curl)
Use the compatibility /mcp endpoint with standard JSON-RPC payloads.
# list tools
curl -X POST http://localhost:8000/mcp -H "Content-Type: application/json" -H "Authorization: Bearer change-me" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
# call current_weather
curl -X POST http://localhost:8000/mcp -H "Content-Type: application/json" -H "Authorization: Bearer change-me" -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"current_weather","arguments":{"city":"Paris","country":"FR","units":"metric"}}}'
Use as a framework (bring your own tools/resources)
- Optional: remove the samples by deleting
src/orbit_remote_mcp/tools/openweather.pyandsrc/orbit_remote_mcp/resources/sample.pyif you don’t want them discovered. - Create your tool module under
orbit_remote_mcp/toolswith a class that implements:from mcp.types import Tool, TextContent class MyTools: async def list_tools(self) -> list[Tool]: return [ Tool( name="hello", description="Say hello", inputSchema={"type": "object", "properties": {"name": {"type": "string"}}}, ), ] async def call_tool(self, name: str, arguments: dict[str, object]): if name != "hello": raise ValueError("Unknown tool") who = arguments.get("name", "world") return [TextContent(type="text", text=f"Hello, {who}!")] - Add resources similarly under
orbit_remote_mcp/resourceswithlist_resources/get_resource(provide a validuri, e.g.,local://something). - If your modules live elsewhere, set
ORBIT_MODULES=your.module.path(comma-separated for many); built-ins are auto-loaded when not set. - Rebuild/restart. Your tools will appear in
/toolsand/mcp.
Samples (optional)
- OpenWeather tool:
current_weather(params:cityrequired,countryoptional,unitsmetric|imperialdefaultmetric; needsOPENWEATHER_API_KEY). - Sample resource: static status resource at
local://status.
Plugin development
- Add a module under
orbit_remote_mcp.toolsororbit_remote_mcp.resourcesimplementinglist_tools/call_toolorlist_resources/get_resource. - Auto-discovery loads built-ins by default. For external modules, set
ORBIT_MODULES=your.module.path. - Rebuild/restart; tools will be listed via
/toolsand/mcp. Remove the sample modules if you don’t need them.
Security notes
- Keep
ORBIT_REQUIRE_AUTH=trueand set a strongORBIT_AUTH_KEY. - Use session tokens from
/sessionsto avoid sending the API key on every request. - Tune
ORBIT_RATE_LIMIT,ORBIT_MAX_BODY_BYTES, andORBIT_ALLOWED_ORIGINSfor your deployment.
Testing
pip install -e .[dev]
pytest
Architecture
See for a component overview and request flow.
Docs & links
- OrbitAgents orchestrator: Pair with this service by setting
MCP_SERVER_URL/MCP_API_KEY. - : Components and request flow.
Contributing
PRs welcome. Please read before sending changes.
License
MIT. See .