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.
Furikake is an easy to use, local CLI & API for MCP management and execution.
To install Furikake, you can use the following command:
curl -fsSL https://furikake.app/install | bash
Verify the installation by running:
furi
Furikake uses Bun under the hood, the install script will install Bun if it is not already installed.
To upgrade Furikake to the latest version, run:
furi upgrade
Furikake works with any public github repo as follows:
furi add
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.
furi rename
eg. furi rename smithery-ai/mcp-fetch mcp-fetch
furi remove
eg. furi remove mcp-fetch
Show all installed MCPs
furi list
furi start -e '{"name1":"value1", "name2":"value2"}'
-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:
furi env
You can get a list of all the tools available (with details) of any MCP by using:
furi tools
then you can call the tool with:
furi call '{"param1":"value1", "param2":"value2"}'
Parameters must be a valid JSON string enclosed in single quotes
furi stop
furi restart
This will show you the status of all running MCPs.
furi status
If you want to get the logs a specific MCP, you can use:
furi status
to view more output lines, use -l
All installed MCPs, your configuration and logs are stored in the .furikake
directory which can be located by running:
furi where
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:
furi meta start
This will also show you the endpoint your MCP client needs to subscribe to
You can specify a custom port:
furi meta start -p 9338
If you don't pass a port, it will default to 9338
To stop the aggregator:
furi meta stop
To restart the aggregator (preserving port settings):
furi meta restart
To check the status of the aggregator server:
furi meta status
To view more output lines, use -l
To access your MCP's via http, you can turn on the proxy via:
furi http start
In order to pass a port, you can use the http start -p
flag.
furi http start -p 9339
If you don't pass a port, it will default to 9339
To turn off the route, you can use:
furi http stop
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.
All API endpoints follow a standardized JSON response format:
Success responses:
{ "success": true, "data": {"The response varies by endpoint"} }
Error responses:
{ "success": false, "message": "Descriptive error message" }
/mcpName/call/toolName
and /mcpName/start
endpointsEndpoint | 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"}]} |
//tools | GET | List tools for a specific MCP | None | {"success": true, "data": [{"name": "toolName", "description": "Tool description", "inputSchema": {...}}]} |
//call/ | POST | Call a tool on an MCP | Tool parameters as JSON in request body | {"success": true, "data": {/* Tool-specific response */}} |
List running MCPs:
curl http://localhost:9339/list
To view all available tools for all online MCPs, you can use:
curl "http://localhost:9339/list"
List tools for all online MCPs:
curl http://localhost:9339/tools
List tools for a specific MCP:
curl http://localhost:9339//tools
Call a tool:
curl -X POST http://localhost:9339//call/ -d '{"data1":"value1", "data2":"value2"}'
To enable sudo routes that allow API management of MCPs:
furi http start --sudo
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// | GET | Install MCP from GitHub | None | {"success": true, "data": {"installed": true, "message": "Successfully installed"}} |
//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"]}} |
//restart | GET | Restart a specific MCP | None | {"success": true, "data": {"restarted": true}} |
//start | POST | Start a specific MCP | Environment variables as JSON in request body | {"success": true, "data": {"started": true}} |
//stop | GET | Stop a specific MCP | None | {"success": true, "data": {"stopped": true}} |
//rename | GET | Rename a specific MCP | ?newName= (required) | {"success": true, "message": "Renamed from oldName to newName"} or {"success": false, "message": "Error message"} |
//remove | GET | Delete a specific MCP | None | {"success": true, "data": {"removed": true}} |
//env | GET | Get environment variables for a specific MCP | None | {"success": true, "data": {"variables": ["key1", "key2"]}} |
Get status of all MCPs:
curl http://localhost:9339/status
Install an MCP:
curl http://localhost:9339/add//
Get status and logs of a specific MCP:
curl "http://localhost:9339//status?lines=20"
Start an MCP with environment variables:
curl -X POST http://localhost:9339//start -d '{"API_KEY":"your-api-key-here"}'
Restart an MCP:
curl http://localhost:9339//restart
Stop an MCP:
curl http://localhost:9339//stop
Rename an MCP:
curl "http://localhost:9339//rename?newName="
Remove an MCP:
curl http://localhost:9339//remove
If you face any issues with the HTTP API server, you can use the furi http status
to debug.
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.
Discover shared experiences
Shared threads will appear here, showcasing real-world applications and insights from the community. Check back soon for updates!