A self-hosted remote MCP server that provides reusable prompts and conventions
mcp-hub
A self-hosted remote MCP server that provides reusable prompts and conventions across AI tools.
Structure
modules/
└── dev/
└── python.py # Python/uv conventions → prompt: dev_python_uv
Each domain is a subfolder under modules/. Each file exposes a router (a FastMCP instance) that gets mounted in main.py.
Configuration
Copy .env.example to .env and adjust as needed:
MCP_HOST=0.0.0.0
MCP_PORT=9001
Run
uv run main.py
Local Verification
Use FastMCP CLI to verify the server without starting it:
# List all registered tools
uv run fastmcp list main.py
# List tools + prompts
uv run fastmcp list main.py --prompts
# Inspect server details (JSON report)
uv run fastmcp inspect main.py
# Launch MCP Inspector (interactive browser UI for testing tools/prompts)
uv run fastmcp dev inspector main.py
Connect
Add as an MCP server in your AI tool using:
- Transport: Streamable HTTP
- URL:
http://<host>:/mcp
Deploy on Linux
Option 1 — screen (recommended): lets you detach and reattach to the session anytime.
screen -S mcp-hub
uv run main.py
# Ctrl+A then D to detach
# Reattach later:
screen -r mcp-hub
Option 2 — nohup: fire-and-forget, no reattach.
nohup uv run main.py > mcp-hub.log 2>&1 &
# stop later
pkill -f "mcp-hub"
Add a new module
- Create
modules/<domain>/<topic>.pywith arouter = FastMCP(...)and@router.promptfunctions - Mount it in
main.py:mcp.mount(router, namespace="<domain>")
Prompts are namespaced as <namespace>_ (e.g. dev_python_uv).
Environment Variables
MCP_HOSTThe host address for the MCP serverMCP_PORTThe port for the MCP serverConfiguration
{"mcpServers": {"mcp-hub": {"command": "uv", "args": ["run", "main.py"]}}}