ð Furikake (or furi)
ããŒã«ã«ð Furikake (or furi) ã«ã€ããŠ
furi 㯠MCP ãµãŒããŒã管çããããã®ã³ãã³ãã©ã€ã³ããŒã«ããã³ HTTP API ã§ãBun ãš TypeScript ã§æ§ç¯ãããŠããŸããGitHub ããã®ãµãŒããŒã®ããŠã³ããŒãããèµ·åã»åæ¢ã»ãã°ç¢ºèªãè¡ãããããããŒã«ã«ã§ MCP ãµãŒããŒãéçšããéçºè ã«åããŠããŸãã
äž»ãªæ©èœ
- 01GitHub ãªããžããªããã® MCP ãµãŒããŒã®ã€ã³ã¹ããŒã«
- 02ã³ãã³ãã©ã€ã³ã§ã®èµ·åã»åæ¢ã»åèµ·å
- 03å®è¡äžãµãŒããŒã®ç¶æ ãšããã»ã¹ããšã®ãã°è¡šç€º
- 04ä»»æã® sudo ã«ãŒããå«ã HTTP API ã«ãŒã
- 05PM2 ã«ããããã»ã¹ç¶æ 管ç
掻çšã·ãŒã³
- 01ããŒã«ã«ç°å¢ã§è€æ°ã® MCP ãµãŒããŒãã€ã³ã¹ããŒã«ããŠç®¡ç
- 02å®è¡äžã® MCP ãµãŒããŒã®ããŒã«ã HTTP çµç±ã§åŒã³åºã
- 03stdio ã®ã¿ã«å¯Ÿå¿ããã¯ã©ã€ã¢ã³ããžã®çµ±åããŒã«æäŸ
MCP 察å¿
furi ã¯å®è¡äžã®ãã¹ãŠã® MCP ãµãŒããŒããããŒã«ãéçŽããSSE ãšã³ããã€ã³ããŸã㯠stdio ãã©ã³ã¹ããŒããéã㊠MCP ã¯ã©ã€ã¢ã³ãã«æäŸããŸãã
èšå®
ããŒã«ã«ãµãŒããŒã®èšå®ã¯ã©ã®ã¯ã©ã€ã¢ã³ãã§ãå ±éã§ããã³ããŒããŠã¯ã©ã€ã¢ã³ãã® MCP èšå®ãã¡ã€ã«ã«è²Œãä»ããŠãã ããã
ãã®ãµãŒããŒã®ããã±ãŒãžããªã¢ãŒããšã³ããã€ã³ãã¯ãŸã ååŸã§ããŠããŸããããããžã§ã¯ãã® README ã®æé ã«åŸã£ãŠãã ããã
ããŒã«
ããŒã«ã«ãµãŒããŒã®ããŒã«ã¯ãã·ã³äžã§èµ·åããŠåããŠååŸã§ããŸããã¡ã³ãããŒã¯ãŸã ããŒã«äžèЧãæäŸããŠããŸããã
詳现
furi
furi ã¯ãMCP 管çã«äœ¿ãããã CLI ãš API ã§ãã
- [GitHub] ãã MCP ãµãŒããŒãããŠã³ããŒã
- Smithery.yaml ã®æ€åºïŒãŸãã¯å®è¡ã®èªåæ€åºã»åŠçïŒ
- 倿©èœãª CLInanospinnersãèªã¿ããã
- TypeScript ããã³ JavaScript ã® MCP ã«å¯Ÿå¿
- Python ããŒã¹ã® MCP ã¯äž»èŠãªããŒããããé ç®ã§ãããä»åŸå¯Ÿå¿äºå®ã§ã
- HTTP API ã«ãŒãïŒBun httpãstdio ãã http ãžã®å€æãæç¢ºã§æšæºçãªã«ãŒãã䜿çšïŒ
- ããŒããš sudo ã«ãŒãã®å ¬éç¯å²ãã«ã¹ã¿ãã€ãºå¯èœ
- å®è¡äžã®ãã¹ãŠã® MCP ãšåããã»ã¹ã®ãã°ã衚瀺
- PM2 ã«ããããã»ã¹ç¶æ 管ç
- Bun ãš TypeScript ã§æ§ç¯
- ã飯ã«ããåããŸã
ã€ã³ã¹ããŒã«ïŒmacOS/LinuxïŒ
Furi ãã€ã³ã¹ããŒã«ããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
curl -fsSL https://furi.so/install | bash
次ã®ã³ãã³ããå®è¡ããŠãã€ã³ã¹ããŒã«ã確èªããŸãã
furi
Furikake ã¯å éšã§ Bun ã䜿çšããŸããBun ããŸã ã€ã³ã¹ããŒã«ãããŠããªãå Žåãã€ã³ã¹ããŒã«ã¹ã¯ãªããã«ãã£ãŠã€ã³ã¹ããŒã«ãããŸãã
Furi ã®ã¢ããã°ã¬ãŒã
Furi ãææ°ããŒãžã§ã³ã«ã¢ããã°ã¬ãŒãããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
furi upgrade
äœ¿ãæ¹
MCP ã®ç®¡ç
Furikake ã¯ã次ã®ããã«å ¬éãããŠãã GitHub ãªããžããªã§ããã°ã©ãã§ãå©çšã§ããŸãã
furi add <author/repo>
äŸïŒfuri add smithery-ai/mcp-fetch
rename ã³ãã³ãã䜿ã£ãŠ MCP ã®ååã倿Žããããšãã§ããŸããå®è¡äžã® MCP ã¯åèµ·åãããã®ã§ã泚æãã ããã
furi rename <old-name> <new-name>
äŸïŒfuri rename smithery-ai/mcp-fetch mcp-fetch
MCP ã®åé€
furi remove <mcpName>
äŸïŒfuri remove mcp-fetch
ã€ã³ã¹ããŒã«æžã¿ MCP ã®äžèŠ§è¡šç€º
ã€ã³ã¹ããŒã«æžã¿ã® MCP ããã¹ãŠè¡šç€ºããŸãã
furi list
MCP ã®èµ·å
furi start <mcpName> -e '{"name1":"value1", "name2":"value2"}'
-e env ã¯ä»»æã§ãåŒã³åºã MCP ãµãŒããŒã«ãã£ãŠç°ãªããŸãã
-e ãã©ã°ã«ã¯ãæå¹ãª JSON ãªããžã§ã¯ããæž¡ããŠãã ããã
-e ãã©ã°ã䜿ã£ãŠãµãŒããŒãèµ·åãããšããã®å€ã¯èšå®ãã¡ã€ã«ã«ä¿åãããæ¬¡åãµãŒããŒã䜿çšãããšãã«åå©çšãããŸãã
MCP ã«å¿ èŠãªç°å¢å€æ°ã確èªããã«ã¯ã次ã®ã³ãã³ãã䜿ããŸãã
furi env <mcpName>
次ã®ã³ãã³ãã䜿ããšãä»»æã® MCP ã§å©çšã§ãããã¹ãŠã®ããŒã«ãšãã®è©³çްãäžèŠ§è¡šç€ºã§ããŸãã
furi tools <mcpName>
ãã®åŸã次ã®ã³ãã³ãã§ããŒã«ãåŒã³åºããŸãã
ããŒã«ã®åŒã³åºã
furi call <mcpName> <toolName> '{"param1":"value1", "param2":"value2"}'
ãã©ã¡ãŒã¿ãŒã¯ãæå¹ãª JSON æååãåäžåŒçšç¬Šã§å²ãã§æå®ããŠãã ããã
MCP ã®åæ¢
furi stop <mcpName>
MCP ã®åèµ·å
furi restart <mcpName>
å®è¡äžã®ãã¹ãŠã® MCP ã®ã¹ããŒã¿ã¹ååŸ
å®è¡äžã®ãã¹ãŠã® MCP ã®ã¹ããŒã¿ã¹ã衚瀺ãããŸãã
furi status
ç¹å®ã® MCP ã®ãã°ãååŸããã«ã¯ã次ã®ã³ãã³ãã䜿ããŸãã
furi status <mcpName>
ããã«å€ãã®åºåè¡ã衚瀺ããã«ã¯ã-l <lines> ã䜿ããŸãã
èšå®ã®ä¿åå
ã€ã³ã¹ããŒã«æžã¿ã®ãã¹ãŠã® MCPãèšå®ããã°ã¯ .furikake ãã£ã¬ã¯ããªã«ä¿åãããŸãããã®ãã£ã¬ã¯ããªã®å Žæã¯ã次ã®ã³ãã³ãã§ç¢ºèªã§ããŸãã
furi where
MCP Aggregator ã®äœ¿çš
MCP Aggregator ã䜿ããšãCursor ãªã©ã®ä»»æã® MCP ã¯ã©ã€ã¢ã³ãã§ Furikake ãå©çšã§ããŸãã
Furi ã¯å®è¡äžã®ãã¹ãŠã® MCP ããããŒã«ãåéããã¢ããªãŸã㯠MCP ã¯ã©ã€ã¢ã³ãããµãã¹ã¯ã©ã€ãã§ãã SSE ãšã³ããã€ã³ããéããŠå ¬éããŸããAggregator ã¯ãå®è¡äžã®ãã¹ãŠã® MCP ããããŒã«ã®äžèЧãèªåçã«äœæããMCP ã®èµ·åã»åæ¢ã«å¿ããŠæ°ããããŒã«ãç£èŠããŸãã
SSE ã«å¯Ÿå¿ãã MCP ã¯ã©ã€ã¢ã³ãã®å Žå
Aggregator ãµãŒããŒãèµ·åããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
furi meta start
ããã«ãããMCP ã¯ã©ã€ã¢ã³ãããµãã¹ã¯ã©ã€ããããšã³ããã€ã³ãã衚瀺ãããŸãã
stdio ã®ã¿ããµããŒããã MCP ã¯ã©ã€ã¢ã³ãã®å Žå
SSE ãã©ã³ã¹ããŒãã«å¯Ÿå¿ããŠããããstdio æ¥ç¶ãå¿ èŠãª MCP ã¯ã©ã€ã¢ã³ãããããŸãããã®å Žåã¯ã次ã®ã³ãã³ãã䜿ããŸãã
furi connect
ããã«ãããAggregator ãµãŒããŒã stdio ã¢ãŒãã§çŽæ¥èµ·åããMCP ã¯ã©ã€ã¢ã³ã㯠stdin/stdout çµç±ã§æ¥ç¶ã§ããŸãããµãŒããŒã¯å®è¡äžã® MCP ãããã¹ãŠã®ããŒã«ãéçŽããstdio ãã©ã³ã¹ããŒããéããŠå©çšã§ããããã«ããŸãã
éèŠïŒãã®ã³ãã³ã㯠MCP ãããã³ã«ã®èŠä»¶ã«æºæ ãããããJSON ã®ã¿ãåºåããŸããMCP ã¯ã©ã€ã¢ã³ããšã®éä¿¡ã劚ããªãããããã¹ãŠã®ãã°åºåã¯æå¶ãããŸãã
泚ïŒfuri meta start ãšã¯ç°ãªãããã®ã³ãã³ãã¯ãã©ã¢ã°ã©ãŠã³ãã§å®è¡ãããæ¥ç¶ãçŽæ¥ç¶æããŸãã
ã«ã¹ã¿ã ããŒããæå®ã§ããŸãã
furi meta start -p 9338
ããŒããæå®ããªãå Žåãããã©ã«ã㯠9338 ã§ãã
Aggregator ã忢ããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
furi meta stop
ããŒãèšå®ãä¿æãããŸãŸ Aggregator ãåèµ·åããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
furi meta restart
Aggregator ãµãŒããŒã®ã¹ããŒã¿ã¹ã確èªããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
furi meta status
ããã«å€ãã®åºåè¡ã衚瀺ããã«ã¯ã-l <lines> ã䜿ããŸãã
HTTP API ã®äœ¿çš
- å®è¡äžã® MCP ã«ã¯ãèªåçã« HTTP ã«ãŒããèšå®ãããŸãã
- MCP ã®ãªã³ïŒãªã㯠CLI ããã®ã¿è¡ããŸãã
MCP ã« HTTP çµç±ã§ã¢ã¯ã»ã¹ããã«ã¯ã次ã®ã³ãã³ãã§ãããã·ãæå¹ã«ããŸãã
furi http start
ããŒããæå®ããã«ã¯ãhttp start -p <port> ãã©ã°ã䜿çšããŸãã
furi http start -p 9339
ããŒããæå®ããªãå Žåãããã©ã«ãã§ 9339 ã䜿çšãããŸãã
ã«ãŒããç¡å¹ã«ããã«ã¯ã次ã®ã³ãã³ãã䜿çšããŸãã
furi http stop
HTTP API ãªãã¡ã¬ã³ã¹
Furikake HTTP API ã¯ããããªãã¯ã«ãŒããšsudo ã«ãŒãã«åãããŠããŸãããããªãã¯ã«ãŒãã¯ããã©ã«ãã§ã¢ã¯ã»ã¹ã§ããŸãããsudo ã«ãŒãã¯æç€ºçã«æå¹ã«ããå¿ èŠããããŸããsudo ã«ãŒãã䜿ããšãHTTP API çµç±ã§ããã±ãŒãžãã€ã³ã¹ã¿ã³ã¹ãçŽæ¥ç®¡çã§ããŸãã
API ãä¿è·ããå Žåã¯ãHTTP_AUTH_TOKEN ç°å¢å€æ°ãèšå®ããŸãã
export HTTP_AUTH_TOKEN=your-secret-token
ãŸãã¯ã.env ãã¡ã€ã«ã«èšå®ããŸãã
HTTP_AUTH_TOKEN=your-secret-token
GitHub ã®ã¬ãŒãå¶é
ããã±ãŒãžã®ã€ã³ã¹ããŒã«æã« GitHub API ã®ã¬ãŒãå¶éãåé¿ããã«ã¯ãGitHub ããŒãœãã«ã¢ã¯ã»ã¹ããŒã¯ã³ãæå®ããŸãã
export GITHUB_KEY=your-github-token
ãŸãã¯ã.env ãã¡ã€ã«ã«èšå®ããŸãã
GITHUB_KEY=your-github-token
ããã«ãããã¬ãŒãå¶éã 1 æéããã 60 ãªã¯ãšã¹ããã 5,000 ãªã¯ãšã¹ãã«å¢å ããŸããGitHub ã®èšå® > éçºè åãèšå® > å人çšã¢ã¯ã»ã¹ããŒã¯ã³ã§ããŒãœãã«ã¢ã¯ã»ã¹ããŒã¯ã³ãäœæã§ããŸãã
API ã¬ã¹ãã³ã¹åœ¢åŒ
ãã¹ãŠã® API ãšã³ããã€ã³ãã¯ãæšæºåããã JSON ã¬ã¹ãã³ã¹åœ¢åŒã«åŸããŸãã
-
æåã¬ã¹ãã³ã¹ïŒ
{ "success": true, "data": {"The response varies by endpoint"} } -
ãšã©ãŒã¬ã¹ãã³ã¹ïŒ
{ "success": false, "message": "Descriptive error message" }
HTTP ã¡ãœãã
- POST -
/mcpName/call/toolNameããã³/mcpName/startãšã³ããã€ã³ãã§ã®ã¿äœ¿çšããŸã - GET - ãã®ä»ãã¹ãŠã®ãšã³ããã€ã³ãã§äœ¿çšããŸã
ãããªãã¯ã«ãŒã
| ãšã³ããã€ã³ã | ã¡ãœãã | 説æ | ãã©ã¡ãŒã¿ãŒ | ã¬ã¹ãã³ã¹åœ¢åŒ |
|---|---|---|---|---|
/list | GET | å®è¡äžã® MCP ãäžèŠ§è¡šç€ºããŸã | ãã¹ãŠã®ã€ã³ã¹ããŒã«æžã¿ MCP ã衚瀺ããã«ã¯ ?all=trueïŒä»»æïŒ | {"success": true, "data": ["mcpName1", "mcpName2"]} |
/tools | GET | å®è¡äžã®ãã¹ãŠã® MCP ããå©çšå¯èœãªããŒã«ãäžèŠ§è¡šç€ºããŸã | ãªã | {"success": true, "data": [{"name": "toolName", "description": "Tool description", "inputSchema": {...}, "mcpName": "mcpName"}]} |
/<mcpName>/tools | GET | æå®ãã MCP ã®ããŒã«ãäžèŠ§è¡šç€ºããŸã | ãªã | {"success": true, "data": [{"name": "toolName", "description": "Tool description", "inputSchema": {...}}]} |
/<mcpName>/call/<toolName> | POST | MCP ã®ããŒã«ãåŒã³åºããŸã | ãªã¯ãšã¹ãæ¬æã« JSON 圢åŒã§æå®ããããŒã«ãã©ã¡ãŒã¿ãŒ | {"success": true, "data": {/* Tool-specific response */}} |
䜿çšäŸïŒ
å®è¡äžã® MCP ãäžèŠ§è¡šç€ºããŸãã
curl http://localhost:9339/list
ãªã³ã©ã€ã³ã®ãã¹ãŠã® MCP ã§å©çšå¯èœãªããŒã«ã衚瀺ããã«ã¯ã次ã®ã³ãã³ãã䜿çšããŸãã
curl "http://localhost:9339/list"
ãªã³ã©ã€ã³ã®ãã¹ãŠã® MCP ã®ããŒã«ãäžèŠ§è¡šç€ºããŸãã
curl http://localhost:9339/tools
ç¹å®ã® MCP ã®ããŒã«ãäžèŠ§è¡šç€ºããŸãã
curl http://localhost:9339/<mcpName>/tools
ããŒã«ãåŒã³åºããŸãã
curl -X POST http://localhost:9339/<mcpName>/call/<toolName> -d '{"data1":"value1", "data2":"value2"}'
Sudo ã«ãŒã
MCP ã API ã§ç®¡çã§ãã Sudo ã«ãŒããæå¹ã«ããã«ã¯ïŒ
furi http start --sudo
| ãšã³ããã€ã³ã | ã¡ãœãã | 説æ | ãã©ã¡ãŒã¿ãŒ | ã¬ã¹ãã³ã¹åœ¢åŒ |
|---|---|---|---|---|
/status | GET | ãã¹ãŠã® MCP ã®ç¶æ ïŒå®è¡äžããã³åæ¢äžïŒãååŸ | ãªã | {"success": true, "data": [{"name": "mcpName", "pid": "12345", "status": "online", "cpu": "0%", "memory": "10MB", "uptime": "2h"}]} |
/add/<author>/<repo> | GET | GitHub ãã MCP ãã€ã³ã¹ããŒã« | ãªã | {"success": true, "data": {"installed": true, "message": "Successfully installed"}} |
/<mcpName>/status | GET | ç¹å®ã® MCP ã®ç¶æ ãååŸ | ãã°è¡æ°ãæå®ãã ?lines=10ïŒä»»æïŒ | {"success": true, "data": {"name": "mcpName", "pid": "12345", "status": "online", "logs": ["log line 1", "log line 2"]}} |
/<mcpName>/restart | GET | ç¹å®ã® MCP ãåèµ·å | ãªã | {"success": true, "data": {"restarted": true}} |
/<mcpName>/start | POST | ç¹å®ã® MCP ãèµ·å | ãªã¯ãšã¹ãæ¬æã« JSON 圢åŒã§ç°å¢å€æ°ãæå® | {"success": true, "data": {"started": true}} |
/<mcpName>/stop | GET | ç¹å®ã® MCP ã忢 | ãªã | {"success": true, "data": {"stopped": true}} |
/<mcpName>/rename | GET | ç¹å®ã® MCP ã®ååãå€æŽ | ?newName=<newName>ïŒå¿
é ïŒ | {"success": true, "message": "Renamed from oldName to newName"} ãŸã㯠{"success": false, "message": "Error message"} |
/<mcpName>/remove | GET | ç¹å®ã® MCP ãåé€ | ãªã | {"success": true, "data": {"removed": true}} |
/<mcpName>/env | GET | ç¹å®ã® MCP ã®ç°å¢å€æ°ãååŸ | ãªã | {"success": true, "data": {"variables": ["key1", "key2"]}} |
䜿çšäŸïŒ
ãã¹ãŠã® MCP ã®ç¶æ ãååŸïŒ
curl http://localhost:9339/status
MCP ãã€ã³ã¹ããŒã«ïŒ
curl http://localhost:9339/add/<author>/<repo>
ç¹å®ã® MCP ã®ç¶æ ãšãã°ãååŸïŒ
curl "http://localhost:9339/<mcpName>/status?lines=20"
ç°å¢å€æ°ãæå®ã㊠MCP ãèµ·åïŒ
curl -X POST http://localhost:9339/<mcpName>/start -d '{"API_KEY":"your-api-key-here"}'
MCP ãåèµ·åïŒ
curl http://localhost:9339/<mcpName>/restart
MCP ã忢ïŒ
curl http://localhost:9339/<mcpName>/stop
MCP ã®ååã倿ŽïŒ
curl "http://localhost:9339/<mcpName>/rename?newName=<newName>"
MCP ãåé€ïŒ
curl http://localhost:9339/<mcpName>/remove
HTTP API ãµãŒããŒã§åé¡ãçºçããå Žåã¯ãfuri http status ã䜿ã£ãŠãããã°ã§ããŸãã
ç· ãããã
ãããŸã§èªãã§ããã ãããªããFurikake ã圹ã«ç«ã¡ãæéã®ç¯çŽã«ãªãããšãé¡ã£ãŠããŸããMCP ããã£ãšå®è·µçã«æ±ãããã«ã楜ãã¿ãªããäœã£ããã®ã§ããè²¢ç®ãããå Žåã¯ããæ°è»œã« Issue ãŸãã¯ãã«ãªã¯ãšã¹ããäœæããŠãã ããã倿Žã確èªããããã§ããŒãžããŸãã
è¯ãã¢ã€ãã¢ã ãšæã£ããããªããžããªã«ã¹ã¿ãŒãä»ããŠãã ããã
Furikake ãã芧ããã ããããããšãããããŸãã
ã³ã¡ã³ã
MCP ã¯åããŠã§ããïŒ
ãããã³ã«ã®æŠèŠããæåã®ãµãŒããŒã®å°å ¥ãŸã§ãããããçåã«ãŸãšããŠçããŸãã
AI ã¢ããªã±ãŒã·ã§ã³ãå€éšã®ããŒã«ãããŒã¿ãœãŒã¹ã«çµ±äžçãªæ¹æ³ã§æ¥ç¶ããããã®ãªãŒãã³ãªãããã³ã«ã§ããã¯ã©ã€ã¢ã³ãã¯ã¢ãã«ãšã®å¯Ÿè©±ãæ ããMCP ãµãŒããŒã¯ããŒã«ã»ãªãœãŒã¹ã»ããã³ãããã³ãã¬ãŒããæäŸããŸããæšæºã¡ãã»ãŒãžã§ããåãããããã1 ã€ã®ãµãŒããŒãè€æ°ã®ã¯ã©ã€ã¢ã³ãã§åå©çšã§ããŸãã