This project provides a unified command-line interface (CLI) and orchestration layer to manage multiple Model Context Protocol (MCP) servers. It simplifies setup, configuration, and execution, providing a consistent developer experience across all servers, with powerful features for multi-account management.
- Core Concepts
- CLI Architecture (v2)
- Getting Started
- Focused Setups for Specific Workflows
- CLI Command Reference
- Advanced Usage: The Alias System
- Server Reference
- License
- Unified Management: A single CLI to rule them all. Start, configure, and manage servers written in any language (Node.js, Go, Python, Dart) without worrying about their individual setup requirements.
- Centralized Configuration: All server configurations and API keys are managed in a single
.envfile, making it easy to back up and share your setup. - Multi-Account Support: The powerful alias system allows you to configure a single server (like GitHub) to work with multiple accounts (e.g., "personal" and "work") seamlessly.
The command-line interface now follows a Single-Responsibility layout. Instead of one giant cli.js, the code is split into purpose-built modules inside the cli/ folder:
| Path | Responsibility |
|---|---|
cli/utils.js |
Generic helper functions (toPrettyName, getServers, etc.) |
cli/install_dependencies.js |
Installs / tidies language-specific dependencies for a server. |
cli/constants.js |
Project-wide enums such as ServerLang. |
cli/runners/ |
One file per language encapsulating the logic to launch that server type: • node_runner.js• go_runner.js• python_runner.js• dart_runner.js |
The entry point cli/index.js now acts as a thin orchestrator:
- Parses CLI arguments with Commander.
- Discovers a server's language from its
mcp.yml. - Delegates actual execution to the matching runner.
Follow these steps to get the entire environment up and running.
Ensure you have the following software installed on your system:
- Node.js: Version 18.x or higher is required to run the orchestrator CLI.
- Go: Version 1.21 or higher for Go-based servers.
- Python: Version 3.10 or higher for Python-based servers.
- Dart: For Dart-based servers.
Open your terminal in the project's root directory and run the following command. This will install the CLI tool's dependencies.
npm installThis is a critical step for authenticating with various services.
- In the project root, create a file named
.env. - Copy the contents of the template below into your new
.envfile. - Fill in the values for the services you intend to use.
# -----------------------------------------------------------------------------
# API Keys - Add your personal access tokens here.
# See the "Advanced Usage: The Alias System" section to configure multiple accounts.
# -----------------------------------------------------------------------------
# FIGMA: https://www.figma.com/developers/api#access-tokens
FIGMA_API_KEY=your_figma_personal_access_token
# GITHUB: https://github.com/settings/tokens
GITHUB_PERSONAL_ACCESS_TOKEN=ghp_...
# GITLAB: https://gitlab.com/-/profile/personal_access_tokens
GITLAB_TOKEN=glpat-...
# CLICKUP: https://clickup.com/api/
CLICKUP_API_TOKEN=pk_...
# POSTMAN: https://learning.postman.com/docs/developer/postman-api/authentication/#generate-a-postman-api-key
POSTMAN_API_KEY=PMAK-...Run the setup command to automatically find all servers in the /servers directory and install their specific language dependencies (e.g., npm install, go mod tidy, etc.).
npm run setupTo make the servers available in Cursor, you must generate the mcp.json configuration file. Run the setup command with the --cursor-setup flag.
npm run setup -- --cursor-setupNote: The -- is important. It tells npm to pass the --cursor-setup flag to our script instead of consuming it.
You must restart Cursor for it to recognize the new or updated server configurations. After restarting, your tools will be available in the chat.
For a cleaner and faster experience, you can choose to only set up the servers you need.
If your primary focus is Flutter development, use the --flutter-essentials flag. This will configure Cursor to use only the most relevant servers for that workflow, reducing clutter in the tool selection menu.
npm run setup -- --cursor-setup --flutter-essentialsThis will install the following servers:
- Better Fetch
- Compass
- Desktop Commander
- DuckDuckGo Search
- Figma
- Postman
- Flutter (Dart)
- Flutter (Python)
- Dart (Official)
- Sequential Thinking
This command prepares all servers. It has two modes of operation.
1. Default: Install Dependencies
Running the command without any flags will iterate through all available servers and install their specific language dependencies.
npm run setup2. Cursor Configuration (--cursor-setup)
To generate the mcp.json file and runner scripts required by Cursor, use the --cursor-setup flag.
npm run setup -- --cursor-setup3. Codex Configuration (--codex-setup)
Generates a config.toml for the OpenAI Codex CLI and compatible extensions. By default, writes to a platform-specific path (override with --codex-config).
Default paths: Windows C:\\Users\\<you>\\.codex\\config.toml, Linux/macOS ~/.config/codex/config.toml.
npm run setup -- --codex-setup
# Or with explicit output path
npm run setup -- --codex-setup --codex-config "C:\\Users\\you\\.codex\\config.toml"Note: Confirm the expected Codex config path/schema for your environment.
This command builds and runs a specific server by its ID (the directory name in /servers).
npm start figma-nodeSkipping Dependency Installation (--no-install)
By default, npm start will first ensure a server's dependencies are installed. To skip this step for a faster start, use the --no-install flag.
npm start figma-node -- --no-installLists all available server IDs found in the /servers directory.
npm run listStarts each available server sequentially for 15 seconds to verify they can launch without errors. Useful for debugging your setup.
This is the most powerful feature of the orchestrator. It allows you to use a single server with multiple identities (e.g., a personal and a work GitHub account).
The system works by looking for specially named variables in your .env file. When you create an aliased server, the script appends the alias name to the base key (BASE_KEY_ALIASNAME) and uses that value instead.
Let's walk through an example for Figma.
1. Define Aliased Keys in .env
In your .env file, you have your default FIGMA_API_KEY. To add a "Qoder" account, you add a second key with _QODER appended. The orchestrator will automatically capitalize the alias name.
# Default Figma key
FIGMA_API_KEY=fig_personal_xxxxxxxxxx
# Aliased key for the 'Qoder' account
FIGMA_API_KEY_QODER=fig_qoder_xxxxxxxxxx2. Run Setup with an Alias
Run the setup script again, but this time, provide the alias to the --cursor-setup command in the format server-id:alias-name.
npm run setup -- --cursor-setup "figma-node:qoder"You can add multiple aliases for multiple servers: npm run setup -- --cursor-setup "figma-node:qoder,github-go:work".
| Server Name | Language | Source Repository |
|---|---|---|
| Qoder - Better Fetch | Node.js | better-fetch |
| Qoder - Clickup | Node.js | mcp-clickup |
| Qoder - Compass | Node.js | mcp-compass |
| Qoder - Desktop Commander | Node.js | DesktopCommanderMCP |
| Qoder - Docker | Python | mcp-server-docker |
| Qoder - DuckDuckGo Search | Python | duckduckgo-mcp-server |
| Qoder - Figma | Node.js | qoder-mcps |
| Qoder - Flutter (Dart) | Dart | mcp_flutter |
| Qoder - Flutter (Python) | Python | flutter-mcp |
| Qoder - Github | Go | github-mcp-server |
| Qoder - Gitlab | Go | gitlab-mcp |
| Qoder - Postman | Node.js | mcp-server-postman-tool-generation |
| Qoder - Sequential Thinking | Node.js | sequentialthinking |
This project is licensed under the BSD 3-Clause License – see the LICENSE file for full details.
Migration note: The historical
cli.jsin the project root has been removed. All entry-points now live in thecli/folder (e.g.node cli/index.js start <id>). Existingnpmscripts already point to the new location, so no action is required for day-to-day use.