Inspiration
MCP is everywhere: Linear, Notion, Stripe, Sentry, and dozens of local tools all speak the same protocol. But every host still wants its own config: paste another URL, wire another bearer token, fight another OAuth. I wanted one local funnel: add N upstream MCPs once, then point Codex (or any host) at a single authenticated endpoint and stop babysitting server lists.
What it does
Sumeru is a local desktop MCP funnel/manager. You add upstream servers (stdio commands like npx …, or Streamable HTTP URLs), and it exposes them through one loopback endpoint:
http://127.0.0.1:7341/mcp with bearer auth.
The host only sees three gateway tools:
list_mcps: what’s configuredlist_mcp_tools: tools for a given upstreamexecute_mcp_tool: call an upstream tool
Extras that make it usable day to day:
- System tray lifecycle (close window → keep serving; Quit from tray to stop)
- Pause / Resume and optional launch at login
- Browser OAuth for HTTP MCPs (DCR when available; guided Client ID flow when not)
- Secrets in the OS keychain
- A Marketplace for one-click install of curated DCR providers (Notion, Linear, Stripe, Sentry, etc.)
- CLI + npm launcher (
sumeru-mcp) for stdio hosts andsumeru gui
How I built it
- Planning phase: Gpt 5.6 sol
- Desktop shell: Tauri (Rust) + Svelte 5 / Vite / shadcn-svelte
- Gateway: Rust Streamable HTTP MCP server on loopback, bearer-gated, browser
Originrejected - Upstream pool: lazy connect on first tool use; reuse until edit/delete/quit; no blind retries on ambiguous failures
- Transports: argv-based stdio (no shell strings) and HTTPS HTTP MCPs (plain HTTP only on loopback)
- OAuth: RFC 9728 / 8414 discovery, PKCE, Dynamic Client Registration, loopback callback on
:7342 - Distribution: GitHub Releases (macOS/Linux), portable CLI binaries, npm
sumeru-mcp, in-app VitePress docs
Challenges we ran into
- MCP + OAuth issues: some providers support DCR cleanly; others need manual Client IDs, secrets, and exact redirect URIs I had to support both to ensure utility.
- Tool surface bloat: dumping every upstream tool into the host breaks context; the three-tool gateway keeps the host schema small and routes intentionally
Accomplishments that we're proud of
- A real product loop: install → Marketplace OAuth → paste one endpoint into Cursor → call tools
- OAuth that works for both DCR and non-DCR providers, with tokens in the OS keychain
- A tiny, intentional gateway API
- Ship path: desktop UI, CLI/stdio mode, docs site, and release automation CI/CD
What we learned
- OAuth “just works” is aspirational; discovery, DCR, and fallback UX all have to be reliable.
- Local tooling works best when lifecycle is boring: tray, autostart, pause, keychain, one URL and other quality of life things.
What's next for Sumeru
- Grow the Marketplace catalog and tighten non-DCR guided setup
- Better observability: connection health, last-error surfaces, safer retry policy where it’s unambiguous
- Smoother multi-host workflows and clearer agent-facing docs for the three gateway tools
- Cross-platform polish (Windows packaging, Wayland/AppImage edges) and more cookbook recipes
- Polishing macOS version of the app, it is currently untested.
Built With
- aggregator
- javascript
- linux
- marketplace
- mcp
- rust
- tauri
Log in or sign up for Devpost to join the conversation.