The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Universal MCP Toolkit listing page.
English · 简体中文 · Español · 日本語 · 한국어 · Français · Deutsch · Português · Русский · हिन्दी · العربية
The canonical open-source monorepo for production-ready Model Context Protocol servers.
If you have ever wanted one place to find great MCP servers for GitHub, Slack, Notion, databases, cloud platforms, research sources, and local files without stitching together a dozen half-finished repos, this is it.
universal-mcp-toolkit is one of three sibling projects that compose into a complete agent memory + tooling stack:
| Project | Role |
|---|---|
| universal-mcp-toolkit | MCP protocol, server registry, and tool routing |
| memos | Graph-based persistent memory across agent sessions |
| llm-guardian | Token-cost guardian that compresses prompts and injects MemOS memory slices |
Together they cover transport + tools (UMT), memory + persistence (MemOS), and LLM inference cost control (llm-guardian). The MemOS MCP adapter is published as @mem-os/sdk and pairs directly with UMT's link memos command.
The fastest way to get going:
For a guided setup walkthrough, open docs/getting-started.html. For deterministic composition, see docs/workflows.md.
Or install globally:
Or install from CodeGuilds — the community registry for AI developer tools:
The MCP ecosystem is exploding, but the developer experience is still fragmented.
universal-mcp-toolkit fixes that with one opinionated, high-quality Turborepo:
.well-known/mcp-server.json server cardsumt tools list finds any MCP tool across 27+ servers by name or categoryumt workflow validate|run executes reviewable, versioned JSON workflows with strict input and step referencesumt compose remains available for quick two-step output pipingumt discover --registry reads official MCP Registry-compatible endpoints alongside local and well-known discoveryMCPFunctionCallingBridge caches results by tool+args, avoiding redundant API callscallToolStreaming() exposes completed results through an async chunk iterator; it does not claim protocol-level streamingSession class orchestrates tools across multiple MCP servers with parallel callsregisterLazyTool defers expensive initialization until a tool is actually calledcallToolChain with ToolChain types enables compile-time-checked tool pipelines| Category | What you get |
|---|---|
| Core runtime | @universal-mcp-toolkit/core with typed tool registration, env loading, Zod validation, integration manifests, pino logging, stdio and HTTP runtime bootstrapping |
| Unified CLI | universal-mcp-toolkit with list, config, install, run, tools list, workflow, compose, discover, and doctor |
| Collaboration servers | GitHub, Notion, Slack, Linear, Jira, Discord, Trello |
| Productivity servers | Google Calendar, Google Drive |
| Media and commerce servers | Spotify, Stripe |
| Data servers | PostgreSQL, MongoDB, Redis, Supabase, Airtable |
| Platform servers | Vercel, Cloudflare Workers, Docker, npm Registry |
| Research and local servers | Hacker News, arXiv, FileSystem |
| Memory server | MemOS local persistent memory |
Experimental companion packages under the @contextcore/* scope currently include Notion, Slack, Playwright, and OpenAI variants used for a separate publish line and testing lane.
| Option | Breadth | DX quality | Shared architecture | Host config help | Documentation polish | Tool discovery | Server composition | Caching | Lazy loading | Remote MCP discovery | Resilient transport | Token budgeting |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
universal-mcp-toolkit | 28 servers in one monorepo | High | Yes | Yes | Yes | ✅ umt tools list | ✅ umt compose | ✅ TTL+LRU | ✅ registerLazyTool | ✅ umt discover --remote | ✅ Auto-reconnect + circuit breaker | ✅ TokenBudgetManager |
| Single-service MCP repos | Narrow | Varies | No | Rarely | Usually none | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Personal one-off scripts | Very narrow | Low | No | No | No | Usually none | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Server | Focus | Primary required env |
|---|---|---|
| GitHub | Repositories, pull requests, workflows, search | GITHUB_TOKEN |
| Notion | Pages, databases, structured docs | NOTION_TOKEN |
| Slack | Channels, history, messaging | SLACK_BOT_TOKEN |
| Linear | Issue triage and planning | LINEAR_API_KEY |
| Jira | Tickets, workflow transitions, incident triage | JIRA_BASE_URL, JIRA_EMAIL, JIRA_API_TOKEN |
| Google Calendar | Calendars, events, meeting workflows | GOOGLE_CALENDAR_ACCESS_TOKEN |
| Google Drive | Search, metadata, exports | GOOGLE_DRIVE_ACCESS_TOKEN |
| Spotify | Playback, search, playlists | SPOTIFY_ACCESS_TOKEN |
| Stripe | Customers, invoices, subscriptions | STRIPE_SECRET_KEY |
| PostgreSQL | Tables, schema inspection, guarded queries | POSTGRESQL_URL |
| MongoDB | Collections, document reads, aggregation | MONGODB_URI |
| Redis | Keys, TTLs, cache diagnostics | REDIS_URL |
| Supabase | Tables, storage, project access | SUPABASE_URL, SUPABASE_KEY |
| Vercel | Projects, deployments, environments | VERCEL_TOKEN |
| Cloudflare Workers | Workers, routes, edge rollouts | CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID |
| Docker | Containers, images, daemon state | none required |
| npm Registry | Search, metadata, versions, dist-tags | none required |
| Hacker News | Top stories, search, threads | none required |
| arXiv | Paper search and reading lists | none required |
| FileSystem | Safe local file search, reads, writes | FILESYSTEM_ROOTS |
| MemOS | Local-first persistent memory over MCP | none required |
| Discord | Guilds, channels, messages, members | DISCORD_BOT_TOKEN |
| Airtable | Tables, records, CRUD operations | AIRTABLE_API_KEY, AIRTABLE_BASE_ID |
| Trello | Boards, lists, cards, archiving | TRELLO_API_KEY, TRELLO_TOKEN |
| Playwright | Browser automation and web scraping | PLAYWRIGHT_BROWSERS_PATH (optional) |
| OpenAI | Chat completions, embeddings, and model queries | OPENAI_API_KEY |
Some servers also expose optional tuning variables such as POSTGRESQL_ALLOW_WRITES, REDIS_ALLOW_WRITES, MONGODB_ALLOW_WRITE_PIPELINES, VERCEL_TEAM_ID, or FILESYSTEM_MAX_READ_BYTES. The root .env.example includes the most useful knobs.
The bundled list above is curated and dependency-pinned. Third-party MCP servers
can be added as opt-in entries using the same mcpServers config shape — just
point npx at the external package. They are not part of the default bundle.
@vynly/mcp)Vynly is a social network purpose-built for AI-generated
images and short video. Its MCP server (@vynly/mcp,
by @Vovala14) exposes a public posting API with a
free demo token on first call (no signup) and handles provenance verification
(C2PA / SynthID / generator EXIF) automatically — useful when you want an agent to
publish output anywhere with provenance baked in.
Opt-in only: Vynly is not bundled in the default config. Add it to your host config (Claude Desktop, Cursor, or any MCP client) as a normal
npxserver:
Grab a free demo token (no signup) before first use:
Then generate or merge the snippet with:
(If umt does not yet know the vynly server id, paste the JSON above directly
into your host config — the runtime is the same npx -y @vynly/mcp launch.)
universal-mcp-toolkit/ ├─ packages/ │ ├─ core/ │ ├─ bridge/ │ └─ cli/ ├─ docs/ │ ├─ index.html │ └─ getting-started.html ├─ servers/ │ ├─ github/ │ ├─ notion/ │ ├─ slack/ │ ├─ linear/ │ ├─ jira/ │ ├─ google-calendar/ │ ├─ google-drive/ │ ├─ spotify/ │ ├─ stripe/ │ ├─ postgresql/ │ ├─ mongodb/ │ ├─ redis/ │ ├─ supabase/ │ ├─ vercel/ │ ├─ cloudflare-workers/ │ ├─ docker/ │ ├─ npm-registry/ │ ├─ hackernews/ │ ├─ arxiv/ │ ├─ discord/ │ ├─ airtable/ │ ├─ trello/ │ └─ filesystem/ ├─ turbo.json ├─ pnpm-workspace.yaml └─ README.md
The CLI is designed to feel like a real product, not a pile of scripts.
umt listSee every available server, grouped by category with required environment variables and descriptions.
umt configGenerate ready-to-paste JSON for Claude Desktop, Cursor, or any MCP-compatible host config flow.
umt installRun an interactive setup flow, choose servers, choose npx or workspace mode, write the result to disk, and save the profile for later reference.
umt runLaunch any built workspace server locally with stdio or HTTP+SSE transport.
The --supervise flag enables crash-loop detection and automatic restarts:
If the server crashes 5 times within 60 seconds it stops retrying. Logs are written to the state directory under logs/<serverId>.log and can be tailed with umt logs <serverId>.
umt doctorCheck build output, config state, and required environment variables before you waste time debugging a missing token or missing dist file.
| Command | What it does |
|---|---|
umt status | Show currently running umt server processes and their PIDs |
umt logs <server> | Tail the log file for a specific server |
umt test <server> | Run a live end-to-end MCP handshake test against a server |
umt conformance [server] | Check registry config and live stdio handshakes where local build output exists |
umt workflow validate <file> | Validate a versioned JSON workflow without starting any server |
umt workflow run <file> --input <json> | Execute a validated workflow sequentially and disconnect every step safely |
umt discover --registry [url] | Include official or private MCP Registry-compatible entries in discovery |
umt search <query> | Search available servers by name, description, and tags |
umt init | Interactive setup wizard for new users |
umt update | Check npm for a newer version of the CLI and optionally install it |
umt upgrade | Check npm for newer versions of individual server packages |
umt export | Export install profiles to a portable JSON file (no secrets included) |
umt export-config | Export current server config in a specific client format |
umt link | Link a local MemOS/ContextCore SQLite memory database |
umt profile create <name> | Create a new named profile with interactive wizard |
umt profile show [name] | Show profile configuration details |
umt profile export <name> | Export a named profile to a JSON file |
umt profile import <path> | Import a profile from a JSON file |
Paste a generated snippet into your Claude Desktop config file. On Windows, that is commonly:
On macOS, use ~/Library/Application Support/Claude/claude_desktop_config.json. On Linux, use ~/.config/Claude/claude_desktop_config.json.
The JSON examples below use literal placeholders like ${GITHUB_TOKEN}. Replace them with real values before pasting into your host config.
Example:
Generate the same mcpServers snippet and place it into the MCP config file you use for Cursor. The CLI keeps the format host-friendly and consistent, so the same generated JSON works well as a reusable snippet:
Every server in the toolkit is designed around the same transport story:
stdio for local child-process integrationsThe shared core handles runtime bootstrapping, logging, env loading, and tool registration so every server behaves consistently.
UMT is discoverable through three complementary manifest paths so it shows up in registry search, Smithery, and direct well-known lookups:
registry-server.json at the repo root uses the reverse-DNS name io.github.markgatcha.universal-mcp-toolkit and lists the tool surface, transports, and environment variables. Submit it to the official registry to appear in mcp-cli search results..well-known/mcp/server-card.json is the well-known server card that Smithery (and any RFC-style crawler) fetches to build a live profile. Keep version and description in sync with packages/cli/package.json..well-known/mcp-server.json — the discovery document served by the running server; bumped to 1.6.28 with the updated registry description.@universal-mcp-toolkit/core is the part you will want to study if you are building your own MCP servers.
It includes:
ToolkitServer base classdefineTool<TInput, TOutput> helperloadEnv() for strict configuration validationHttpServiceClient for typed fetch-based integrationscreateServerCard() for discovery metadatavalidateIntegrationManifest() and summarizeIntegrationReadiness() for versioned integration evidenceparseRuntimeOptions() and runToolkitServer() for stdio and HTTP launch flowsSee docs/integration-contract.md for the additive integration contract and readiness model.
.well-known/This repo is meant to be the reference implementation developers point to when they ask:
The answer should be: clone this repo, run the CLI, read the core package, and adapt the parts you need.
Use Turbo filters when you only want to work on one package:
If you only want the onboarding path, start with docs/getting-started.html.
packages/coreShared runtime primitives and strict abstractions for server authors.
packages/bridgeConnect any MCP server to any LLM provider — OpenAI, Anthropic, or Ollama function-calling format. Includes health monitoring, circuit breakers, RBAC, audit logging, TTL+LRU caching, and a full agent conversation loop. Use with the Vercel AI SDK via @universal-mcp-toolkit/ai-sdk.
packages/ai-sdkAdapter that lets you use UMT's MCP tools directly with the Vercel AI SDK's streamText() and generateText() functions. Zero boilerplate — turn any MCP server into AI SDK tools in one line.
packages/cliThe operator console for listing, configuring, installing, running, and diagnosing the entire toolkit.
servers/*27 independently publishable MCP server packages that all share the same operational shape.
The monorepo is intentionally structured so it can grow without losing coherence.
Please read CODE_OF_CONDUCT.md before participating in issues, pull requests, reviews, or discussions. The project aims to stay both technically rigorous and welcoming to contributors at every experience level.
Pair universal-mcp-toolkit with MemOS for persistent, graph-based memory across agent sessions.
MemOS acts as the memory layer for your MCP stack — every tool call, result, and context your agent produces can be stored, retrieved, and searched across restarts and sessions. The MemOS MCP adapter runs through npx -y @mem-os/sdk mcp.
| Layer | Tool | Role |
|---|---|---|
| Transport & Tools | universal-mcp-toolkit | MCP protocol, server registry, tool routing |
| Memory & Persistence | MemOS | Graph-based persistent memory across sessions |
| LLM Inference | Ollama / any LLM | Local model execution |
Building something with universal-mcp-toolkit? We'd love to know.
Open a Discussion and tell us:
You might get featured here.
If you've created a custom server, workflow, or integration using this toolkit as a base, open a PR to add it to the Wiki or start a Discussion. The best examples will be highlighted in the README.
If UMT saves you from stitching together a dozen half-finished MCP repos, consider the star — it keeps the project visible.
MIT — see LICENSE for full terms.