Open source · MIT licensed

Memory, skills, and live data sources behind one MCP endpoint.

Relivo MCP Server is a multi-namespace Model Context Protocol server in Go. Point any MCP client at a route and its tools appear: memory, skills, Search Console, Product Hunt, and events, all behind one HTTP mux.

5 namespaces·42 tools·1 endpoint·Go 1.26+
mcp.json
{
  "mcpServers": {
    "memory": {
      "type": "http",
      "url": "https://go-mcp-server-latest.onrender.com/memory/mcp",
      "headers": {
        "X-API-Key": "<your-api-key>"
      }
    },
    "skills": {
      "type": "http",
      "url": "https://go-mcp-server-latest.onrender.com/skills/mcp",
      "headers": {
        "X-API-Key": "<your-api-key>"
      }
    },
    "gsc": {
      "type": "http",
      "url": "https://go-mcp-server-latest.onrender.com/gsc/mcp",
      "headers": {
        "X-API-Key": "<your-api-key>"
      }
    },
    "producthunt": {
      "type": "http",
      "url": "https://go-mcp-server-latest.onrender.com/producthunt/mcp",
      "headers": {
        "X-API-Key": "<your-api-key>"
      }
    },
    "event": {
      "type": "http",
      "url": "https://go-mcp-server-latest.onrender.com/event/mcp",
      "headers": {
        "X-API-Key": "<your-api-key>"
      }
    }
  }
}

Built to extend

Opinionated where it counts, out of your way everywhere else.

Multi-namespace mux

Five independent MCP servers on one endpoint. A domain never reaches across another except through internal/mcpx.

Self-registering

Add a namespace as a single package with an init(). cmd/server/main.go never changes; the mux picks it up on the next start.

Streamable HTTP

Built on the official MCP Go SDK's Streamable HTTP transport, over stdlib net/http with structured slog logging.

Hybrid RAG memory

Durable, per-user recall by meaning and keyword over Postgres + pgvector. Store a fact once, retrieve it across sessions.

Live Agent Skills

Find and download Agent Skills straight from GitHub in real time. Nothing is cached; every call reflects live GitHub.

Keyed by default

Every namespace requires an X-API-Key before dispatch, and memory scopes each caller to their own rows — one caller can never read another's memories.

Adding a namespace is one package

Namespaces self-register through internal/mcpx. Create a package that calls mcpx.Register from its init(), blank-import it, and the mux mounts the new route on the next start. No wiring, no central registry to edit.

Read the architecture
register.go
// internal/todo/register.go
package todo

func init() { mcpx.Register(namespace{}) }

// That's it. Blank-import the package in main.go
// and the mux mounts /todo/mcp on the next start.

Point a client at it and go

Free and open source. Clone the repo, run make run, and connect your first MCP client in under a minute.