Built with and supports Bun for running MCP processes
Allows downloading MCPs directly from GitHub repositories
Supports MCPs built with JavaScript
Provides process state management for MCPs using PM2
Supports MCPs built with TypeScript
🍃 Furikake (or furi)
Furikake is an easy to use, local CLI & API for MCP management and execution.
- Download MCP servers [from GitHub]
- Smithery.yaml detection (or auto detects/handles execution)
- Fully featured CLI [nanospinners, readability]
- Typescript & Javascript MCP's built in are supported
- Python based MCP's are a key roadmap item (and will be supported)
- HTTP API Routes (uses Bun http, stdio to http, clear and standard routes)
- Customizable port and visibility of sudo routes
- View all running MCPs + logs for each process
- Process state management with PM2
- Built with Bun and Typescript
- is good with rice
Installation (macOS/Linux)
To install Furikake, you can use the following command:
Verify the installation by running:
Furikake uses Bun under the hood, the install script will install Bun if it is not already installed.
Upgrade Furikake
To upgrade Furikake to the latest version, run:
How to use
Manage MCPs
Furikake works with any public github repo as follows:
eg. furi add smithery-ai/mcp-fetch
You can also rename an MCP by using the rename
command, please note this will restart the MCP if it is running.
eg. furi rename smithery-ai/mcp-fetch mcp-fetch
Delete an MCP
eg. furi remove mcp-fetch
List installed MCPs
Show all installed MCPs
Start an MCP
-e env is optional and dependant on the MCP server being called
Ensure you pass a valid JSON object to the -e
flag.
Once you start a server with the -e
flag, it will be saved to the config file and re-used when using the server again.
In order to view the env variables required for an MCP, use:
You can get a list of all the tools available (with details) of any MCP by using:
then you can call the tool with:
Call a tool
Parameters must be a valid JSON string enclosed in single quotes
Stop an MCP
Restart an MCP
Get the status of all running MCPs
This will show you the status of all running MCPs.
If you want to get the logs a specific MCP, you can use:
to view more output lines, use -l <lines>
Configuration storage
All installed MCPs, your configuration and logs are stored in the .furikake
directory which can be located by running:
Using the MCP Aggregator
You can use Furikake with any MCP client such as Cursor via the MCP Aggregator.
Furi collects tools from all running MCPs and exposes them through an SSE endpoint that your app or mcp client can subscribe to. The aggregator automatically builds the list of tools from all running MCPs and listens for new tools as MCPs are started and stopped.
To start the aggregator server:
This will also show you the endpoint your MCP client needs to subscribe to
You can specify a custom port:
If you don't pass a port, it will default to 9338
To stop the aggregator:
To restart the aggregator (preserving port settings):
To check the status of the aggregator server:
To view more output lines, use -l <lines>
Using the HTTP API
- Any MCP that is running, will automatically have an http route.
- Turning an MCP on/off can only be done via the cli.
To access your MCP's via http, you can turn on the proxy via:
In order to pass a port, you can use the http start -p <port>
flag.
If you don't pass a port, it will default to 9339
To turn off the route, you can use:
HTTP API Reference
The Furikake HTTP API is divided into public routes and sudo routes. Public routes are accessible by default, while sudo routes must be explicitly enabled. With sudo routes, you can actively manage packages and instances via the HTTP API.
API Response Format
All API endpoints follow a standardized JSON response format:
- Success responses:
- Error responses:
HTTP Methods
- POST - Used only for
/mcpName/call/toolName
and/mcpName/start
endpoints - GET - Used for all other endpoints
Public Routes
Endpoint | Method | Description | Parameters | Response Format |
---|---|---|---|---|
/list | GET | List running MCPs | ?all=true (optional) to show all installed MCPs | {"success": true, "data": ["mcpName1", "mcpName2"]} |
/tools | GET | List all available tools from all running MCPs | None | {"success": true, "data": [{"name": "toolName", "description": "Tool description", "inputSchema": {...}, "mcpName": "mcpName"}]} |
/<mcpName>/tools | GET | List tools for a specific MCP | None | {"success": true, "data": [{"name": "toolName", "description": "Tool description", "inputSchema": {...}}]} |
/<mcpName>/call/<toolName> | POST | Call a tool on an MCP | Tool parameters as JSON in request body | {"success": true, "data": {/* Tool-specific response */}} |
Example Usage:
List running MCPs:
To view all available tools for all online MCPs, you can use:
List tools for all online MCPs:
List tools for a specific MCP:
Call a tool:
Sudo Routes
To enable sudo routes that allow API management of MCPs:
Endpoint | Method | Description | Parameters | Response Format |
---|---|---|---|---|
/status | GET | Get status of all MCPs (running and stopped) | None | {"success": true, "data": [{"name": "mcpName", "pid": "12345", "status": "online", "cpu": "0%", "memory": "10MB", "uptime": "2h"}]} |
/add/<author>/<repo> | GET | Install MCP from GitHub | None | {"success": true, "data": {"installed": true, "message": "Successfully installed"}} |
/<mcpName>/status | GET | Get status of a specific MCP | ?lines=10 (optional) to control log lines | {"success": true, "data": {"name": "mcpName", "pid": "12345", "status": "online", "logs": ["log line 1", "log line 2"]}} |
/<mcpName>/restart | GET | Restart a specific MCP | None | {"success": true, "data": {"restarted": true}} |
/<mcpName>/start | POST | Start a specific MCP | Environment variables as JSON in request body | {"success": true, "data": {"started": true}} |
/<mcpName>/stop | GET | Stop a specific MCP | None | {"success": true, "data": {"stopped": true}} |
/<mcpName>/rename | GET | Rename a specific MCP | ?newName=<newName> (required) | {"success": true, "message": "Renamed from oldName to newName"} or {"success": false, "message": "Error message"} |
/<mcpName>/remove | GET | Delete a specific MCP | None | {"success": true, "data": {"removed": true}} |
/<mcpName>/env | GET | Get environment variables for a specific MCP | None | {"success": true, "data": {"variables": ["key1", "key2"]}} |
Example Usage:
Get status of all MCPs:
Install an MCP:
Get status and logs of a specific MCP:
Start an MCP with environment variables:
Restart an MCP:
Stop an MCP:
Rename an MCP:
Remove an MCP:
If you face any issues with the HTTP API server, you can use the furi http status
to debug.
Closing notes
If you've made it this far, I hope you find Furikake useful and time saving. I built this for fun as a way for me to work with MCP's more hands on. If you wish to contribute, feel free to open an issue or a pull request. I will merge after I check out your changes.
If you think this is a good idea, please star the repo.
Thanks for checking out Furikake.
This server cannot be installed
local-only server
The server can only run on the client's local machine because it depends on local resources.
A local CLI & API for MCP management that allows users to download, install, manage, and interact with MCPs from GitHub, featuring process state management, port allocation, and HTTP API routes.
Related MCP Servers
- AsecurityFlicenseAqualityMCP Server for the GitHub API, providing features for file operations, repository management, and advanced search, with automatic branch creation and comprehensive error handling.Last updated -1843TypeScript
- AsecurityFlicenseAqualityMCP server for managing Git operations on local repositories, allowing users to list repositories, get and create tags, list commits, push tags, and refresh repositories through a standardized interface.Last updated -6Python
- -security-license-qualityAn MCP server that allows Claude and other MCP-compatible LLMs to interact with the GitHub API, supporting features like creating issues, getting repository information, listing issues, and searching repositories.Last updated -TypeScript
- -securityFlicense-qualityProvides tools for interacting with GitHub's API through the MCP protocol, allowing users to create repositories, push content, and retrieve user information.Last updated -JavaScript