Skip to content

Latest commit

ย 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ› ๏ธ toolhub

English | ะ ัƒััะบะธะน | ไธญๆ–‡


TOOL HUB is a high-performance, self-hosted, open-source platform for creating, orchestrating, federating, and securely executing tools for AI agents of any kind.

Stop hardcoding functions into system prompts and overloading model context windows with hundreds of API schemas. TOOL HUB provides agents with a structured, distributed skill file system featuring on-the-fly tree navigation and a unified interaction contract.

Version Runtime Federation MCP IDE Bridge Packages


๐Ÿ“ธ Screenshots

ToolHub Skills Tree ToolHub Runners Studio ToolHub Agent Playground


๐ŸŽฌ Live Demo & Web Client

ToolHub works out-of-the-box with the open-source ๐Ÿงช lab (labstudio.tech) web client (GitHub Repo) โ€” an ultra-lightweight, serverless LLM workspace:

ToolHub in action with ๐Ÿงช lab


๐Ÿ†š How ToolHub differs from typical MCP gateways (MCPJungle, MCPHub, etc.)

Criterion ToolHub MCPJungle / MCPHub (typical MCP gateway)
Core approach Execution engine: turns any script (Bun, Python, Go, Bash, etc.) into a tool on the fly Proxy registry: registers pre-built MCP servers and grants access to them
Creating a tool Write a script โ†’ it instantly becomes an agent tool Requires an already-built MCP server implementing the protocol
Navigation Hierarchical folder tree (listTools("/system")) Flat list of registered servers/tools, grouped via Tool Groups
Federation Infinitely nested REMOTE nodes (hub โ†’ hub โ†’ hub) Single layer: client โ†’ gateway โ†’ servers, no recursive nesting
MCP integration Supports MCP as one category type (Stateless + Stateful Pool) MCP is the only supported format
MCP โ†’ native tool conversion Yes (MCP Promote) Not available
IDE integration Yes (Sublime Merge diff, replace-literal, native Ctrl+Z) Not available
Access control Tool toggles in admin panel, two password tiers (agent/admin) ACL/RBAC, Tool Groups, per-client tokens (in enterprise mode)

๐ŸŽฏ Core Concepts & Philosophy

  1. Zero Docker Needed: Written in Bun, running code directly in isolated OS temp workspaces. Runs effortlessly on Raspberry Pi, lightweight VPS, or bare-metal servers. (Containerization/VM wrappers can still be attached on the runner layer).
  2. Language Agnostic: Turn any script in Bun, Node.js, Python, Go, Bash, PHP, Deno, C++ into an AI tool. If a command runs in a terminal, it becomes an agent skill.
  3. Strict Hierarchical Navigation: Tools are organized as a filesystem folder tree. Models browse categories via listTools(), select the target tool, and execute it via callTool().
  4. Infinite Federation: Connect ToolHub instances into nested tree networks with automated path normalization and cycle protection.
  5. Dual-Mode MCP Engine: Support for Model Context Protocol (MCP) in standard Stdio spawn mode and Stateful Persistent Pools for memory-heavy sessions (Puppeteer, SSH, databases).

๐Ÿ›  Architectural Overview

                                  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                                  โ”‚   AI AGENT / SDK CLIENTโ”‚
                                  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                              โ”‚ HTTP Requests
                                              โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                                   TOOL HUB CORE SYSTEM                                  โ”‚
โ”‚                                                                                         โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚                              Fastify Router & Auth                                โ”‚  โ”‚
โ”‚  โ”‚   โ€ข Agent Auth (x-agent-password)         โ€ข Admin Auth (x-admin-password)         โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚         โ”‚                                          โ”‚                                    โ”‚
โ”‚         โ–ผ                                          โ–ผ                                    โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                             โ”‚
โ”‚  โ”‚  Agent API   โ”‚                          โ”‚  Admin API   โ”‚                             โ”‚
โ”‚  โ”‚  (/*)        โ”‚                          โ”‚ (/admin/api/*)                             โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                             โ”‚
โ”‚         โ”‚                                         โ”‚                                     โ”‚
โ”‚         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                                     โ”‚
โ”‚                              โ–ผ                                                          โ”‚
โ”‚                     UNIFIED ROUTER ENGINE                                               โ”‚
โ”‚                              โ”‚                                                          โ”‚
โ”‚      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                                  โ”‚
โ”‚      โ–ผ                       โ–ผ                       โ–ผ                                  โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”             โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”             โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                             โ”‚
โ”‚ โ”‚  LOCAL  โ”‚             โ”‚ REMOTE  โ”‚             โ”‚   MCP   โ”‚                             โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜             โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜             โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜                             โ”‚
โ”‚      โ”‚                       โ”‚                       โ”‚                                  โ”‚
โ”‚      โ–ผ                       โ–ผ                       โ–ผ                                  โ”‚
โ”‚  Workspace              HubSDK Proxy            MCP Engine                              โ”‚
โ”‚  Execution             (Infinite Tree)      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                         โ”‚
โ”‚  (Bun/Py/Go...)                             โ–ผ                 โ–ผ                         โ”‚
โ”‚                                         Stateless        Stateful Pool                  โ”‚
โ”‚                                        (Stdio Spawn)    (Persistent PID)                โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โš™๏ธ Execution Pipeline: Runner $\rightarrow$ Tool $\rightarrow$ Response

1. Workspace Isolation  โ†’  2. Injection  โ†’  3. Build/Install  โ†’  4. Run & Telemetry
  (/tmp/hub_run_xxx/)        (Code & Deps)      (installCmd)       (runCmd + ENV)
  1. Workspace Isolation: Creates a dedicated temp directory (/tmp/hub_run_<timestamp>_<hash>).
  2. File Injection: Injects source into codeFileName and dependencies into depFileName.
  3. Payload Passing: Injects parameters into input.json and mirrors each key as INPUT_<KEY_NAME> environment variables.
  4. Dependency Installation: Runs installCmd (e.g. pip install -r requirements.txt) if dependencies exist.
  5. Execution & Telemetry: Executes runCmd with timeout controls, reads output from output.json or stdout, logs execution metrics into Audit Logs.
  6. Workspace Purge: Completely wipes the isolated temp directory.

๐Ÿ”Œ IDE Bridge & Portable Skill Packs (.toolpack)

1. Sublime Text Bridge

  • Atomic AST Edits (replace-literal): AI targets exact line replacements in ~2ms with zero token waste.
  • Sublime Merge Integration: Real-time diff preview inside your editor; accept/reject changes in one click.
  • Native Undo Stack: AI modifications integrate with native Ctrl+Z undo history.

2. Import, Export & Versioning (.toolpack & ToolVersion)

  • Skill Portability: Export folders, schemas, and runners into .toolpack bundles.
  • Revision Journal: Automatic snapshots on every edit with one-click rollbacks.

๐Ÿ—‚ Category Types

Type Purpose Operation
LOCAL Native tool workspace Executes scripts locally through configured runners.
REMOTE ToolHub proxy tunnel Recursive gateway to remote nodes via HubSDK.
MCP External MCP server Stdio-driven Model Context Protocol server.

โšก MCP Ecosystem: Stateless, Stateful Pool & Promote

  1. Stateless MCP (Stdio): Full lifecycle per call: spawn $\rightarrow$ initialize $\rightarrow$ tools/call $\rightarrow$ exit.
  2. Stateful MCP Pool (mcpIsStateful): Keeps processes alive in memory for complex sessions (Puppeteer, SSH). Hot calls execute in 10โ€“30ms. Auto-terminates after 5 minutes of idle (TTL=300s) with auto-recovery on crash.
  3. MCP Promote: One-click promotion of remote MCP definitions into editable native database tools.

๐ŸŒ Infinite Federation

  • Deep Nesting: Server A connects to Server B, which links to Server C, exposed as a unified path (/office/home/lights/turn_on).
  • Cycle Protection: Graph analysis prevents cyclic recursive traversal loops.
  • Transparent Routing: HubSDK handles path normalization and credential forwarding automatically.

๐Ÿค– Agent Tag Protocol (XML)

1. Navigation

<hub>listTools("/system")</hub>

2. Execution

<hub>callTool("/sublime/replace-literal", {
  "find": "const PORT = 3000;",
  "replace": "const PORT = 8080;"
})</hub>

๐Ÿ”’ Security

  • Agent Security (x-agent-password): Protects skill discovery and execution routes (GET /*, POST /*).
  • Admin Studio Security (x-admin-password): Protects management APIs and web console (/admin/*).

๐Ÿ“ฆ Quick Start

# 1. Clone repository
git clone https://github.com/Talos-Popcorn/toolhub.git
cd toolhub

# 2. Install dependencies
bun install

# 3. Push Prisma schema to database
bun run db:push

# 4. Interactive Installer & Seed
# (Prompt language: EN/RU/ZH, custom admin/agent passwords)
bun run db:seed

# Non-interactive / CI mode:
# bun run prisma/seed.ts --lang=en --admin-pass=admin --agent-pass=123

# 5. Start development servers
bun run dev
  • Web Console: http://localhost:5173/admin/ (or port 3000 in production)
  • Swagger Docs: http://localhost:3000/docs (Available only in bun run dev mode)
  • Default Admin Password: admin (or chosen during seed)
  • Default Agent Password: 123 (or chosen during seed)

๐Ÿ’ป JS/TS SDK Integration

import { HubSDK } from './SDK/JS/sdk';

const hub = new HubSDK('http://localhost:3000', '123');

async function runAgentLoop(userQuery: string) {
  const systemPrompt = await hub.getSmartPrompt();
  
  const messages = [
    { role: 'system', content: systemPrompt },
    { role: 'user', content: userQuery }
  ];

  let aiResponse = await llm.generate(messages);
  const action = await hub.processAgentResponse(aiResponse);

  if (action.called) {
    messages.push({ role: 'assistant', content: aiResponse });
    messages.push({ 
      role: 'user', 
      content: `HUB_RESULT: ${JSON.stringify(action.result)}` 
    });

    const finalResponse = await llm.generate(messages);
    console.log('Agent Response:', finalResponse);
  }
}

๐Ÿš€ Production Deployment

# Build frontend & sync database
bun run build

# Start production server
bun run start

โš–๏ธ License & Commercial Use

This project is distributed under the AGPL-3.0 License (free for personal use and open-source modifications).

Commercial Use: A commercial license is required to use ๐Ÿ› ๏ธ ToolHub within closed corporate environments or proprietary products without AGPL-3.0 copyleft restrictions.
Contact email: collab@labstudio.tech.


๐Ÿ› ๏ธ toolhub

English | ะ ัƒััะบะธะน | ไธญๆ–‡


TOOL HUB โ€” ัั‚ะพ ะฒั‹ัะพะบะพะฟั€ะพะธะทะฒะพะดะธั‚ะตะปัŒะฝะฐั self-hosted ะฟะปะฐั‚ั„ะพั€ะผะฐ ั ะพั‚ะบั€ั‹ั‚ั‹ะผ ะธัั…ะพะดะฝั‹ะผ ะบะพะดะพะผ ะดะปั ัะพะทะดะฐะฝะธั, ัƒะฟั€ะฐะฒะปะตะฝะธั, ั„ะตะดะตั€ะฐั†ะธะธ ะธ ะฑะตะทะพะฟะฐัะฝะพะณะพ ะธัะฟะพะปะฝะตะฝะธั ะธะฝัั‚ั€ัƒะผะตะฝั‚ะพะฒ (tools) ะดะปั AI-ะฐะณะตะฝั‚ะพะฒ ะปัŽะฑะพะณะพ ั‚ะธะฟะฐ.

ะฅะฒะฐั‚ะธั‚ ั…ะฐั€ะดะบะพะดะธั‚ัŒ ั„ัƒะฝะบั†ะธะธ ะฒ ัะธัั‚ะตะผะฝั‹ะต ะฟั€ะพะผะฟั‚ั‹ ะธ ะฟะตั€ะตะณั€ัƒะถะฐั‚ัŒ ะบะพะฝั‚ะตะบัั‚ ะผะพะดะตะปะธ ัะพั‚ะฝัะผะธ ะพะฟะธัะฐะฝะธะน API. TOOL HUB ะฟั€ะตะดะพัั‚ะฐะฒะปัะตั‚ ะฐะณะตะฝั‚ัƒ ัั‚ั€ัƒะบั‚ัƒั€ะธั€ะพะฒะฐะฝะฝัƒัŽ ั€ะฐัะฟั€ะตะดะตะปั‘ะฝะฝัƒัŽ ั„ะฐะนะปะพะฒัƒัŽ ัะธัั‚ะตะผัƒ ะฝะฐะฒั‹ะบะพะฒ ั ะฝะฐะฒะธะณะฐั†ะธะตะน ยซะฝะฐ ะปะตั‚ัƒยป ะธ ะตะดะธะฝั‹ะผ ะบะพะฝั‚ั€ะฐะบั‚ะพะผ ะฒะทะฐะธะผะพะดะตะนัั‚ะฒะธั.


๐Ÿ“ธ ะกะบั€ะธะฝัˆะพั‚ั‹

ToolHub Skills Tree ToolHub Runners Studio ToolHub Agent Playground


๐ŸŽฌ ะ”ะตะผะพะฝัั‚ั€ะฐั†ะธั ะธ ะฒะตะฑ-ะบะปะธะตะฝั‚

ToolHub ะธะท ะบะพั€ะพะฑะบะธ ะธะฝั‚ะตะณั€ะธั€ะพะฒะฐะฝ ั ะพั‚ะบั€ั‹ั‚ั‹ะผ ะฒะตะฑ-ะบะปะธะตะฝั‚ะพะผ ๐Ÿงช lab (labstudio.tech) (GitHub Repo) โ€” ะปะตะณะบะพะฒะตัะฝั‹ะผ serverless-ะธะฝั‚ะตั€ั„ะตะนัะพะผ ะดะปั ะพะฑั‰ะตะฝะธั ั LLM:

ToolHub ะฒ ัะฒัะทะบะต ั ๐Ÿงช lab


๐Ÿ†š ะงะตะผ ToolHub ะพั‚ะปะธั‡ะฐะตั‚ัั ะพั‚ ั‚ะธะฟะธั‡ะฝั‹ั… MCP-gateway (MCPJungle, MCPHub ะธ ั‚.ะด.)

ะšั€ะธั‚ะตั€ะธะน ToolHub MCPJungle / MCPHub (ั‚ะธะฟะธั‡ะฝั‹ะน MCP-gateway)
ะกัƒั‚ัŒ ะฟะพะดั…ะพะดะฐ ะ”ะฒะธะถะพะบ ะธัะฟะพะปะฝะตะฝะธั: ะฟั€ะตะฒั€ะฐั‰ะฐะตั‚ ะปัŽะฑะพะน ัะบั€ะธะฟั‚ (Bun, Python, Go, Bash ะธ ั‚.ะด.) ะฒ tool ะฝะฐ ะปะตั‚ัƒ ะŸั€ะพะบัะธ-ั€ะตะตัั‚ั€: ั€ะตะณะธัั‚ั€ะธั€ัƒะตั‚ ัƒะถะต ะณะพั‚ะพะฒั‹ะต MCP-ัะตั€ะฒะตั€ั‹ ะธ ั€ะฐะทะดะฐั‘ั‚ ะบ ะฝะธะผ ะดะพัั‚ัƒะฟ
ะกะพะทะดะฐะฝะธะต tool'ะฐ ะŸะธัˆะตัˆัŒ ัะบั€ะธะฟั‚ โ†’ ะพะฝ ัั€ะฐะทัƒ ัั‚ะฐะฝะพะฒะธั‚ัั ะธะฝัั‚ั€ัƒะผะตะฝั‚ะพะผ ะฐะณะตะฝั‚ะฐ ะัƒะถะตะฝ ะณะพั‚ะพะฒั‹ะน MCP-ัะตั€ะฒะตั€, ะบะพั‚ะพั€ั‹ะน ะบั‚ะพ-ั‚ะพ ัƒะถะต ั€ะตะฐะปะธะทะพะฒะฐะป ะฟะพ ะฟั€ะพั‚ะพะบะพะปัƒ
ะะฐะฒะธะณะฐั†ะธั ะ˜ะตั€ะฐั€ั…ะธั‡ะตัะบะพะต ะดะตั€ะตะฒะพ ะฟะฐะฟะพะบ (listTools("/system")) ะŸะปะพัะบะธะน ัะฟะธัะพะบ ะทะฐั€ะตะณะธัั‚ั€ะธั€ะพะฒะฐะฝะฝั‹ั… ัะตั€ะฒะตั€ะพะฒ/ั‚ัƒะปะพะฒ, ะณั€ัƒะฟะฟะธั€ะพะฒะบะฐ ั‡ะตั€ะตะท Tool Groups
ะคะตะดะตั€ะฐั†ะธั ะ‘ะตัะบะพะฝะตั‡ะฝะพ ะฒะปะพะถะตะฝะฝั‹ะต REMOTE-ัƒะทะปั‹ (ั…ะฐะฑ โ†’ ั…ะฐะฑ โ†’ ั…ะฐะฑ) ะžะดะธะฝ ัƒั€ะพะฒะตะฝัŒ: ะบะปะธะตะฝั‚ โ†’ gateway โ†’ ัะตั€ะฒะตั€ั‹, ะฑะตะท ั€ะตะบัƒั€ัะธะฒะฝะพะน ะฒะปะพะถะตะฝะฝะพัั‚ะธ
MCP-ะธะฝั‚ะตะณั€ะฐั†ะธั ะŸะพะดะดะตั€ะถะธะฒะฐะตั‚ MCP ะบะฐะบ ะพะดะธะฝ ะธะท ั‚ะธะฟะพะฒ ะบะฐั‚ะตะณะพั€ะธะน (Stateless + Stateful Pool) MCP โ€” ะตะดะธะฝัั‚ะฒะตะฝะฝั‹ะน ะฟะพะดะดะตั€ะถะธะฒะฐะตะผั‹ะน ั„ะพั€ะผะฐั‚
ะšะพะฝะฒะตั€ั‚ะฐั†ะธั MCP โ†’ ะฝะฐั‚ะธะฒะฝั‹ะน tool ะ•ัั‚ัŒ (MCP Promote) ะžั‚ััƒั‚ัั‚ะฒัƒะตั‚
IDE-ะธะฝั‚ะตะณั€ะฐั†ะธั ะ•ัั‚ัŒ (Sublime Merge diff, replace-literal, Ctrl+Z) ะžั‚ััƒั‚ัั‚ะฒัƒะตั‚
ะšะพะฝั‚ั€ะพะปัŒ ะดะพัั‚ัƒะฟะฐ Toggle ั‚ัƒะปะพะฒ ะฒ ะฐะดะผะธะฝะบะต, ะดะฒะฐ ัƒั€ะพะฒะฝั ะฟะฐั€ะพะปะตะน (agent/admin) ACL/RBAC, Tool Groups, per-client ั‚ะพะบะตะฝั‹ (ะฒ enterprise-ั€ะตะถะธะผะต)

๐ŸŽฏ ะคะธะปะพัะพั„ะธั ะธ ะบะปัŽั‡ะตะฒั‹ะต ะบะพะฝั†ะตะฟั†ะธะธ

  1. ะ‘ะตะท ะปะธัˆะฝะธั… ะฑะฐั€ัŒะตั€ะพะฒ (Zero Docker Needed): ะะฐะฟะธัะฐะฝะฐ ะฝะฐ Bun ะธ ะธัะฟะพะปะฝัะตั‚ ะบะพะด ะฝะฐะฟั€ัะผัƒัŽ ะฒะพ ะฒั€ะตะผะตะฝะฝั‹ั… ะฟั€ะพัั‚ั€ะฐะฝัั‚ะฒะฐั… ะžะก. ะ ะฐะฑะพั‚ะฐะตั‚ ะฝะฐ Raspberry Pi, ัะบั€ะพะผะฝั‹ั… VPS ะธ ั„ะธะทะธั‡ะตัะบะธั… ัะตั€ะฒะตั€ะฐั… ะฑะตะท ะพะฒะตั€ั…ะตะดะฐ ะบะพะฝั‚ะตะนะฝะตั€ะธะทะฐั†ะธะธ.
  2. ะฏะทั‹ะบะพะฒะฐั ะฐะณะฝะพัั‚ะธะบะฐ: ะ˜ะฝัั‚ั€ัƒะผะตะฝั‚ะพะผ ะฐะณะตะฝั‚ะฐ ะผะพะถะตั‚ ัั‚ะฐั‚ัŒ ะปัŽะฑะพะน ัะบั€ะธะฟั‚ ะฝะฐ Bun, Node.js, Python, Go, Bash, PHP, Deno, C++. ะ•ัะปะธ ะบะพะผะฐะฝะดะฐ ะธัะฟะพะปะฝัะตั‚ัั ะฒ ะบะพะฝัะพะปะธ โ€” ะพะฝะฐ ัั‚ะฐะฝะพะฒะธั‚ัั ะฝะฐะฒั‹ะบะพะผ ะ˜ะ˜.
  3. ะกั‚ั€ะพะณะฐั ะธะตั€ะฐั€ั…ะธั‡ะตัะบะฐั ะฝะฐะฒะธะณะฐั†ะธั: ะ”ะตั€ะตะฒะพ ะฟะฐะฟะพะบ ะฟะพะทะฒะพะปัะตั‚ ะผะพะดะตะปะธ ะฝะต ะดะตั€ะถะฐั‚ัŒ ะฒ ะฟะฐะผัั‚ะธ ัะพั‚ะฝะธ ัั…ะตะผ, ะฐ ะพั‚ะบั€ั‹ะฒะฐั‚ัŒ ะบะฐั‚ะตะณะพั€ะธะธ ั‡ะตั€ะตะท listTools() ะธ ะทะฐะฟัƒัะบะฐั‚ัŒ ะฝัƒะถะฝั‹ะน ะธะฝัั‚ั€ัƒะผะตะฝั‚ ั‡ะตั€ะตะท callTool().
  4. ะ‘ะตัะบะพะฝะตั‡ะฝะฐั ั„ะตะดะตั€ะฐั†ะธั: ะฃะทะปั‹ ToolHub ะพะฑัŠะตะดะธะฝััŽั‚ัั ะฒ ะดั€ะตะฒะพะฒะธะดะฝั‹ะต ัั‚ั€ัƒะบั‚ัƒั€ั‹ ะปัŽะฑะพะน ะฒะปะพะถะตะฝะฝะพัั‚ะธ ั ะฝะพั€ะผะฐะปะธะทะฐั†ะธะตะน ะฟัƒั‚ะตะน ะธ ะทะฐั‰ะธั‚ะพะน ะพั‚ ั€ะตะบัƒั€ัะธะฒะฝั‹ั… ั†ะธะบะปะพะฒ.
  5. ะ”ะฒัƒั…ั€ะตะถะธะผะฝะฐั MCP-ัะบะพัะธัั‚ะตะผะฐ: ะŸะพะดะดะตั€ะถะบะฐ Model Context Protocol (MCP) ะบะฐะบ ะฒ ั€ะฐะทะพะฒะพะผ ั„ะพั€ะผะฐั‚ะต Stdio (spawn-call-kill), ั‚ะฐะบ ะธ ะฒ ะฒะธะดะต ะณะพั€ัั‡ะตะณะพ ะฟัƒะปะฐ ะฟั€ะพั†ะตััะพะฒ (Stateful Persistent Pool) ะดะปั ัะตััะธะน ั ะฐะบั‚ะธะฒะฝั‹ะผ ัะพัั‚ะพัะฝะธะตะผ ะฟะฐะผัั‚ะธ.

๐Ÿ›  ะั€ั…ะธั‚ะตะบั‚ัƒั€ะฝั‹ะน ะพะฑะทะพั€

                                  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                                  โ”‚   AI AGENT / SDK CLIENTโ”‚
                                  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                              โ”‚ HTTP Requests
                                              โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                                   TOOL HUB CORE SYSTEM                                  โ”‚
โ”‚                                                                                         โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚                              Fastify Router & Auth                                โ”‚  โ”‚
โ”‚  โ”‚   โ€ข Agent Auth (x-agent-password)         โ€ข Admin Auth (x-admin-password)         โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚         โ”‚                                          โ”‚                                    โ”‚
โ”‚         โ–ผ                                          โ–ผ                                    โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                             โ”‚
โ”‚  โ”‚  Agent API   โ”‚                          โ”‚  Admin API   โ”‚                             โ”‚
โ”‚  โ”‚  (/*)        โ”‚                          โ”‚ (/admin/api/*)                             โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                             โ”‚
โ”‚         โ”‚                                         โ”‚                                     โ”‚
โ”‚         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                                     โ”‚
โ”‚                              โ–ผ                                                          โ”‚
โ”‚                     UNIFIED ROUTER ENGINE                                               โ”‚
โ”‚                              โ”‚                                                          โ”‚
โ”‚      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                                  โ”‚
โ”‚      โ–ผ                       โ–ผ                       โ–ผ                                  โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”             โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”             โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                             โ”‚
โ”‚ โ”‚  LOCAL  โ”‚             โ”‚ REMOTE  โ”‚             โ”‚   MCP   โ”‚                             โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜             โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜             โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜                             โ”‚
โ”‚      โ”‚                       โ”‚                       โ”‚                                  โ”‚
โ”‚      โ–ผ                       โ–ผ                       โ–ผ                                  โ”‚
โ”‚  Workspace              HubSDK Proxy            MCP Engine                              โ”‚
โ”‚  Execution             (Infinite Tree)      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                         โ”‚
โ”‚  (Bun/Py/Go...)                             โ–ผ                 โ–ผ                         โ”‚
โ”‚                                         Stateless        Stateful Pool                  โ”‚
โ”‚                                        (Stdio Spawn)    (Persistent PID)                โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โš™๏ธ ะœะตั…ะฐะฝะธะบะฐ ะฒั‹ะฟะพะปะฝะตะฝะธั: Runner $\rightarrow$ Tool $\rightarrow$ Response

1. ะกะพะทะดะฐะฝะธะต Workspace  โ†’  2. ะ˜ะฝัŠะตะบั†ะธั ั„ะฐะนะปะพะฒ  โ†’  3. ะ˜ะฝัั‚ะฐะปะปัั†ะธั  โ†’  4. ะ˜ัะฟะพะปะฝะตะฝะธะต & Output
   (/tmp/hub_run_xxx/)       (Code & Deps)           (installCmd)       (runCmd + ENV)
  1. ะ˜ะทะพะปัั†ะธั Workspace: ะ‘ัะบะตะฝะด ัะพะทะดะฐะตั‚ ัƒะฝะธะบะฐะปัŒะฝัƒัŽ ะธะทะพะปะธั€ะพะฒะฐะฝะฝัƒัŽ ะฟะฐะฟะบัƒ ะฒะพ ะฒั€ะตะผะตะฝะฝะพะน ะดะธั€ะตะบั‚ะพั€ะธะธ ะžะก (/tmp/hub_run_<timestamp>_<hash>).
  2. ะ˜ะฝัŠะตะบั†ะธั ะบะพะดะฐ ะธ ะทะฐะฒะธัะธะผะพัั‚ะตะน: ะšะพะด ะทะฐะฟะธัั‹ะฒะฐะตั‚ัั ะฒ codeFileName, ะฐ ะผะฐะฝะธั„ะตัั‚ ะฟะฐะบะตั‚ะพะฒ โ€” ะฒ depFileName.
  3. ะŸะตั€ะตะดะฐั‡ะฐ ะฐั€ะณัƒะผะตะฝั‚ะพะฒ: ะคะพั€ะผะธั€ัƒะตั‚ัั input.json ะฒ ะบะพั€ะฝะต ะฒะพั€ะบัะฟะตะนัะฐ, ะฐ ะฟะฐั€ะฐะผะตั‚ั€ั‹ ะดัƒะฑะปะธั€ัƒัŽั‚ัั ะฒ ะฟะตั€ะตะผะตะฝะฝั‹ะต ะพะบั€ัƒะถะตะฝะธั INPUT_<KEY_NAME>.
  4. ะฃัั‚ะฐะฝะพะฒะบะฐ ะทะฐะฒะธัะธะผะพัั‚ะตะน: ะ•ัะปะธ ะทะฐะดะฐะฝั‹ ะทะฐะฒะธัะธะผะพัั‚ะธ ะธ installCmd, ะฒั‹ะฟะพะปะฝัะตั‚ัั ัะฑะพั€ะบะฐ (ะฝะฐะฟั€., pip install -r requirements.txt).
  5. ะ—ะฐะฟัƒัะบ ะธ ัะฝัั‚ะธะต ะผะตั‚ั€ะธะบ (runCmd): ะ—ะฐะฟัƒัะบะฐะตั‚ัั ะฟั€ะพั†ะตัั ั ั‚ะฐะนะผะฐัƒั‚ะพะผ timeoutMs, ั€ะตะทัƒะปัŒั‚ะฐั‚ ัั‡ะธั‚ั‹ะฒะฐะตั‚ัั ะธะท output.json ะธะปะธ stdout, ะฐ ั‚ะตะปะตะผะตั‚ั€ะธั ะพั‚ะฟั€ะฐะฒะปัะตั‚ัั ะฒ Audit Logs.
  6. ะžั‡ะธัั‚ะบะฐ: ะ’ะพั€ะบัะฟะตะนั ะฟั€ะธะฝัƒะดะธั‚ะตะปัŒะฝะพ ัƒะดะฐะปัะตั‚ัั ะธะท ั„ะฐะนะปะพะฒะพะน ัะธัั‚ะตะผั‹.

๐Ÿ”Œ IDE Bridge & ะŸะตั€ะตะฝะพัะธะผั‹ะต ะฟะฐะบะตั‚ั‹ (.toolpack)

1. ะ˜ะฝั‚ะตะณั€ะฐั†ะธั ั ั€ะตะดะฐะบั‚ะพั€ะฐะผะธ ะบะพะดะฐ (Sublime Text Bridge)

  • ะั‚ะพะผะฐั€ะฝั‹ะต ะฟั€ะฐะฒะบะธ (replace-literal): ะะณะตะฝั‚ ะผะตะฝัะตั‚ ัั‚ั€ะพะณะพ ะบะพะฝะบั€ะตั‚ะฝั‹ะต ัั‚ั€ะพะบะธ ะบะพะดะฐ ะทะฐ 2 ะผั ะฑะตะท ะฟะตั€ะตั€ะฐัั…ะพะดะฐ ั‚ะพะบะตะฝะพะฒ.
  • ะ˜ะฝั‚ะตะณั€ะฐั†ะธั ั Sublime Merge: ะะฐะณะปัะดะฝั‹ะน ะฒะธะทัƒะฐะปัŒะฝั‹ะน Diff ะฒ ะพะบะฝะต ั€ะตะดะฐะบั‚ะพั€ะฐ ั ะฟั€ะธะฝัั‚ะธะตะผ ะฟั€ะฐะฒะพะบ ะฒ 1 ะบะปะธะบ.
  • ะะฐั‚ะธะฒะฝั‹ะน Ctrl+Z: ะŸั€ะฐะฒะบะธ ะพั‚ ะ˜ะ˜ ั€ะฐะฑะพั‚ะฐัŽั‚ ั‡ะตั€ะตะท ัั‚ะฐะฝะดะฐั€ั‚ะฝั‹ะน Undo-ัั‚ะตะบ ั€ะตะดะฐะบั‚ะพั€ะฐ.

2. ะ˜ะผะฟะพั€ั‚, ัะบัะฟะพั€ั‚ ะธ ะฒะตั€ัะธะพะฝะธั€ะพะฒะฐะฝะธะต (.toolpack & ToolVersion)

  • ะจะตั€ะธะฝะณ ะฝะฐะฒั‹ะบะพะฒ: ะญะบัะฟะพั€ั‚ ะบะฐั‚ะตะณะพั€ะธะน ัะพ ะฒัะตะผะธ ะฟะพะดะฟะฐะฟะบะฐะผะธ, ะบะพะดะพะผ ะธ ัั…ะตะผะฐะผะธ ะฒ .toolpack.
  • ะ–ัƒั€ะฝะฐะป ั€ะตะฒะธะทะธะน: ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะฐั ั„ะธะบัะฐั†ะธั ัะฝะธะผะบะพะฒ ะฟั€ะธ ะบะฐะถะดะพะผ ัะพั…ั€ะฐะฝะตะฝะธะธ ั ะพั‚ะบะฐั‚ะพะผ ะฒ 1 ะบะปะธะบ.

๐Ÿ—‚ ะขะธะฟั‹ ะบะฐั‚ะตะณะพั€ะธะน

ะขะธะฟ ะะฐะทะฝะฐั‡ะตะฝะธะต ะŸั€ะธะฝั†ะธะฟ ั€ะฐะฑะพั‚ั‹
LOCAL ะ›ะพะบะฐะปัŒะฝะฐั ะฟะฐะฟะบะฐ ั ะธะฝัั‚ั€ัƒะผะตะฝั‚ะฐะผะธ ะ˜ัะฟะพะปะฝะตะฝะธะต ัะบั€ะธะฟั‚ะพะฒ ั‡ะตั€ะตะท ะฒัั‚ั€ะพะตะฝะฝั‹ะน ะดะฒะธะถะพะบ ั€ะฐะฝะฝะตั€ะพะฒ.
REMOTE ะŸั€ะพะบัะธั€ะพะฒะฐะฝะธะต ะฝะฐ ะดั€ัƒะณะพะน ToolHub ะ ะตะบัƒั€ัะธะฒะฝั‹ะน ั‚ัƒะฝะฝะตะปัŒ ะบ ัƒะดะฐะปะตะฝะฝะพะผัƒ ัƒะทะปัƒ ั‡ะตั€ะตะท HubSDK.
MCP ะ˜ะฝั‚ะตะณั€ะฐั†ะธั ัั‚ะพั€ะพะฝะฝะตะณะพ MCP-ัะตั€ะฒะตั€ะฐ ะ—ะฐะฟัƒัะบ ะฒะฝะตัˆะฝะตะณะพ MCP-ัะตั€ะฒะตั€ะฐ ั‡ะตั€ะตะท Stdio.

โšก MCP ะญะบะพัะธัั‚ะตะผะฐ: Stateless, Stateful Pool ะธ Promote

  1. Stateless MCP (Stdio): ะŸะพะปะฝั‹ะน ั†ะธะบะป ะฝะฐ ะบะฐะถะดั‹ะน ะฒั‹ะทะพะฒ: spawn $\rightarrow$ initialize $\rightarrow$ tools/call $\rightarrow$ kill.
  2. Stateful MCP Pool (mcpIsStateful): ะฃะดะตั€ะถะฐะฝะธะต ะฟั€ะพั†ะตััะฐ ะฒ ะฟะฐะผัั‚ะธ (Puppeteer, SSH, ะกะฃะ‘ะ”). ะŸะพะฒั‚ะพั€ะฝั‹ะต ะฒั‹ะทะพะฒั‹ ะธัะฟะพะปะฝััŽั‚ัั ะทะฐ 10โ€“30 ะผั. ะะฒั‚ะพะทะฐะฒะตั€ัˆะตะฝะธะต ะฟั€ะธ ะฟั€ะพัั‚ะพะต ะฑะพะปะตะต 5 ะผะธะฝัƒั‚ (TTL = 300s) ะธ ัะฐะผะพะฒะพััั‚ะฐะฝะพะฒะปะตะฝะธะต ะฟั€ะธ ัะฑะพัั….
  3. MCP Promote: ะšะพะฝะฒะตั€ั‚ะฐั†ะธั ะดะธะฝะฐะผะธั‡ะตัะบะธั… ะธะฝัั‚ั€ัƒะผะตะฝั‚ะพะฒ MCP ะฒ ะฑะฐะทัƒ ะดะฐะฝะฝั‹ั… ะบะฐะบ ะฝะฐั‚ะธะฒะฝั‹ั… ั€ะตะดะฐะบั‚ะธั€ัƒะตะผั‹ั… Tool ะฒ 1 ะบะปะธะบ.

๐ŸŒ ะ‘ะตัะบะพะฝะตั‡ะฝะฐั ั„ะตะดะตั€ะฐั†ะธั (Infinite Remote Tree)

  • ะ‘ะตัะบะพะฝะตั‡ะฝะฐั ะฒะปะพะถะตะฝะฝะพัั‚ัŒ: ะกะตั€ะฒะตั€ A ะฟะพะดะบะปัŽั‡ะฐะตั‚ ะกะตั€ะฒะตั€ B, ะบะพั‚ะพั€ั‹ะน ัะพะดะตั€ะถะธั‚ ะฟะพะดะบะปัŽั‡ะตะฝะธะต ะบ ะกะตั€ะฒะตั€ัƒ C (/office/home/lights/turn_on).
  • ะ—ะฐั‰ะธั‚ะฐ ะพั‚ ั†ะธะบะปะพะฒ: ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะพะต ะพะฑะฝะฐั€ัƒะถะตะฝะธะต ะธ ะบัƒะฟะธั€ะพะฒะฐะฝะธะต ะฒะทะฐะธะผะฝั‹ั… ั€ะตะบัƒั€ัะธะฒะฝั‹ั… ััั‹ะปะพะบ.
  • ะŸั€ะพะทั€ะฐั‡ะฝะพัั‚ัŒ ะฒั‹ะทะพะฒะพะฒ: HubSDK ะฑะตั€ะตั‚ ะฝะฐ ัะตะฑั ะฝะพั€ะผะฐะปะธะทะฐั†ะธัŽ ะฟัƒั‚ะตะน, ะฟั€ะพะบัะธั€ะพะฒะฐะฝะธะต ะธ ะฐะฒั‚ะพั€ะธะทะฐั†ะธัŽ.

๐Ÿค– ะŸั€ะพั‚ะพะบะพะป ะฐะณะตะฝั‚ะฐ (XML Tag Protocol)

1. ะะฐะฒะธะณะฐั†ะธั ะฟะพ ะดะตั€ะตะฒัƒ

<hub>listTools("/system")</hub>

2. ะ’ั‹ะฟะพะปะฝะตะฝะธะต ะธะฝัั‚ั€ัƒะผะตะฝั‚ะฐ

<hub>callTool("/sublime/replace-literal", {
  "find": "const PORT = 3000;",
  "replace": "const PORT = 8080;"
})</hub>

๐Ÿ”’ ะ‘ะตะทะพะฟะฐัะฝะพัั‚ัŒ ะธ ะฐะฒั‚ะพั€ะธะทะฐั†ะธั

  • Agent Security (x-agent-password): ะ—ะฐั‰ะธั‰ะฐะตั‚ ะฐะณะตะฝั‚ัะบะธะต API-ั€ะพัƒั‚ั‹ (GET /* ะธ POST /*).
  • Admin Studio Security (x-admin-password): ะ—ะฐั‰ะธั‰ะฐะตั‚ ะฐะดะผะธะฝะธัั‚ั€ะฐั‚ะธะฒะฝั‹ะต ั€ัƒั‡ะบะธ ัƒะฟั€ะฐะฒะปะตะฝะธั (/admin/api/*).

๐Ÿ“ฆ ะ‘ั‹ัั‚ั€ั‹ะน ัั‚ะฐั€ั‚

# 1. ะšะปะพะฝะธั€ะพะฒะฐะฝะธะต ั€ะตะฟะพะทะธั‚ะพั€ะธั
git clone https://github.com/Talos-Popcorn/toolhub.git
cd toolhub

# 2. ะฃัั‚ะฐะฝะพะฒะบะฐ ะทะฐะฒะธัะธะผะพัั‚ะตะน
bun install

# 3. ะกะธะฝั…ั€ะพะฝะธะทะฐั†ะธั ัั…ะตะผั‹ ะ‘ะ” Prisma
bun run db:push

# 4. ะ˜ะฝั‚ะตั€ะฐะบั‚ะธะฒะฝั‹ะน ะธะฝัั‚ะฐะปะปัั‚ะพั€ ะธ ัะธะด
# (ะ’ั‹ะฑะพั€ ัะทั‹ะบะฐ ัะธัั‚ะตะผะฝะพะณะพ ะฟั€ะพะผะฟั‚ะฐ EN/RU/ZH, ะฝะฐัั‚ั€ะพะนะบะฐ ะฟะฐั€ะพะปะตะน ะฐะดะผะธะฝะบะธ ะธ ะฐะณะตะฝั‚ะฐ)
bun run db:seed

# ะ˜ะปะธ ะฒ ั‚ะธั…ะพะผ ั€ะตะถะธะผะต ะดะปั CI/Docker:
# bun run prisma/seed.ts --lang=ru --admin-pass=admin --agent-pass=123

# 5. ะ—ะฐะฟัƒัะบ ัะตั€ะฒะตั€ะพะฒ ั€ะฐะทั€ะฐะฑะพั‚ะบะธ
bun run dev
  • ะŸะฐะฝะตะปัŒ ัƒะฟั€ะฐะฒะปะตะฝะธั: http://localhost:5173/admin/ (ะธะปะธ ะฟะพั€ั‚ 3000 ะฒ ะฟั€ะพะด-ัะฑะพั€ะบะต)
  • Swagger ะดะพะบัƒะผะตะฝั‚ะฐั†ะธั: http://localhost:3000/docs (ะ”ะพัั‚ัƒะฟะฝะฐ ั‚ะพะปัŒะบะพ ะฒ ั€ะตะถะธะผะต ั€ะฐะทั€ะฐะฑะพั‚ะบะธ bun run dev)
  • ะ”ะตั„ะพะปั‚ะฝั‹ะน ะฟะฐั€ะพะปัŒ ะฐะดะผะธะฝะบะธ: admin (ะธะปะธ ะทะฐะดะฐะฝะฝั‹ะน ะฟั€ะธ ัะธะดะต)
  • ะ”ะตั„ะพะปั‚ะฝั‹ะน ะฟะฐั€ะพะปัŒ ะฐะณะตะฝั‚ะฐ: 123 (ะธะปะธ ะทะฐะดะฐะฝะฝั‹ะน ะฟั€ะธ ัะธะดะต)

๐Ÿ’ป ะ˜ะฝั‚ะตะณั€ะฐั†ะธั ะฐะณะตะฝั‚ะฐ (JS/TS SDK)

import { HubSDK } from './SDK/JS/sdk';

const hub = new HubSDK('http://localhost:3000', '123');

async function runAgentLoop(userQuery: string) {
  const systemPrompt = await hub.getSmartPrompt();
  
  const messages = [
    { role: 'system', content: systemPrompt },
    { role: 'user', content: userQuery }
  ];

  let aiResponse = await llm.generate(messages);
  const action = await hub.processAgentResponse(aiResponse);

  if (action.called) {
    messages.push({ role: 'assistant', content: aiResponse });
    messages.push({ 
      role: 'user', 
      content: `HUB_RESULT: ${JSON.stringify(action.result)}` 
    });

    const finalResponse = await llm.generate(messages);
    console.log('ะžั‚ะฒะตั‚ ะฐะณะตะฝั‚ะฐ:', finalResponse);
  }
}

๐Ÿš€ ะ ะฐะทะฒะตั€ั‚ั‹ะฒะฐะฝะธะต ะฒ ะฟั€ะพะดะฐะบัˆะฝ

# ะกะฑะพั€ะบะฐ ั„ั€ะพะฝั‚ะตะฝะดะฐ ะธ ัะธะฝั…ั€ะพะฝะธะทะฐั†ะธั ะ‘ะ”
bun run build

# ะ—ะฐะฟัƒัะบ ะฟั€ะพะดะฐะบัˆะฝ ัะตั€ะฒะตั€ะฐ
bun run start

โš–๏ธ ะ›ะธั†ะตะฝะทะธั ะธ ะบะพะผะผะตั€ั‡ะตัะบะพะต ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะต

ะŸั€ะพะตะบั‚ ั€ะฐัะฟั€ะพัั‚ั€ะฐะฝัะตั‚ัั ะฟะพะด ะปะธั†ะตะฝะทะธะตะน AGPL-3.0 (ะฑะตัะฟะปะฐั‚ะตะฝ ะดะปั ะปะธั‡ะฝะพะณะพ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธั ะธ open-source ะผะพะดะธั„ะธะบะฐั†ะธะน).

ะ”ะปั ะบะพะผะผะตั€ั‡ะตัะบะพะณะพ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธั: ะ”ะปั ะธัะฟะพะปัŒะทะพะฒะฐะฝะธั ๐Ÿ› ๏ธ ToolHub ะฒะฝัƒั‚ั€ะธ ะทะฐะบั€ั‹ั‚ั‹ั… ะบะพั€ะฟะพั€ะฐั‚ะธะฒะฝั‹ั… ะบะพะฝั‚ัƒั€ะพะฒ ะธะปะธ ะฟั€ะพะฟั€ะธะตั‚ะฐั€ะฝั‹ั… ะฟั€ะพะดัƒะบั‚ะพะฒ ะฑะตะท ะพะณั€ะฐะฝะธั‡ะตะฝะธะน AGPL-3.0 ั‚ั€ะตะฑัƒะตั‚ัั ะบะพะผะผะตั€ั‡ะตัะบะฐั ะปะธั†ะตะฝะทะธั.
ะŸะพั‡ั‚ะฐ ะดะปั ัะฒัะทะธ: collab@labstudio.tech.


๐Ÿ› ๏ธ toolhub

English | ะ ัƒััะบะธะน | ไธญๆ–‡


TOOL HUB ๆ˜ฏไธ€ๆฌพ้ซ˜ๆ€ง่ƒฝใ€ๆ”ฏๆŒ็งๆœ‰ๅŒ–้ƒจ็ฝฒ็š„ๅผ€ๆบๅนณๅฐ๏ผŒไธ“ไธบๅ„็ฑป AI ๆ™บ่ƒฝไฝ“่ฎพ่ฎก๏ผŒๆไพ›ๆŠ€่ƒฝไธŽๅทฅๅ…ท (Tools) ็š„ๅˆ›ๅปบใ€็ผ–ๆŽ’ใ€่”้‚ฆๅŒ–็ฎก็†ไธŽๅฎ‰ๅ…จๆ‰ง่กŒ็Žฏๅขƒใ€‚

ๅ‘Šๅˆซๅœจ็ณป็ปŸๆ็คบ่ฏไธญ็กฌ็ผ–็ ๅ‡ฝๆ•ฐไปฅๅŠ API Schema ไธฅ้‡ๆถˆ่€—ไธŠไธ‹ๆ–‡็š„็—›็‚นใ€‚TOOL HUB ไธบๆ™บ่ƒฝไฝ“ๆž„ๅปบไบ†็ป“ๆž„ๅŒ–็š„ๅˆ†ๅธƒๅผๆŠ€่ƒฝๆ–‡ไปถ็ณป็ปŸ๏ผŒๆ”ฏๆŒๅณๆ—ถ็›ฎๅฝ•ๅฏผ่ˆชไธŽๆ ‡ๅ‡†็ปŸไธ€็š„ไบคไบ’ๅฅ‘็บฆใ€‚


๐Ÿ“ธ ็•Œ้ขๆˆชๅ›พ

ToolHub Skills Tree ToolHub Runners Studio ToolHub Agent Playground


๐ŸŽฌ ๅŠจๆ€ๆผ”็คบไธŽ Web ๅฎขๆˆท็ซฏ

ToolHub ๅŽŸ็”Ÿๆ— ็ผ้›†ๆˆๅผ€ๆบ Web ๅฎขๆˆท็ซฏ ๐Ÿงช lab (labstudio.tech) (GitHub ไป“ๅบ“) โ€”โ€” ่ถ…่ฝป้‡ใ€ๆ— ๅŽ็ซฏ็š„ Serverless ๅคงๆจกๅž‹ไบคไบ’ๅทฅไฝœๅฐ๏ผš

ToolHub ไธŽ ๐Ÿงช lab ๅๅŒ่ฟ่กŒๆผ”็คบ


๐Ÿ†š ToolHub ไธŽๅ…ธๅž‹ MCP ็ฝ‘ๅ…ณ๏ผˆMCPJungleใ€MCPHub ็ญ‰๏ผ‰็š„ๅŒบๅˆซ

ๅฏนๆฏ”้กน ToolHub MCPJungle / MCPHub๏ผˆๅ…ธๅž‹ MCP ็ฝ‘ๅ…ณ๏ผ‰
ๆ ธๅฟƒๆ€่ทฏ ๆ‰ง่กŒๅผ•ๆ“Ž๏ผšๅฐ†ไปปๆ„่„šๆœฌ๏ผˆBunใ€Pythonใ€Goใ€Bash ็ญ‰๏ผ‰ๅณๆ—ถ่ฝฌๅŒ–ไธบๅทฅๅ…ท ไปฃ็†ๆณจๅ†Œ่กจ๏ผšๆณจๅ†Œๅทฒๅฎž็Žฐๅฅฝ็š„ MCP ๆœๅŠกๅ™จๅนถๅˆ†้…่ฎฟ้—ฎๆƒ้™
ๅˆ›ๅปบๅทฅๅ…ท ็ผ–ๅ†™่„šๆœฌ โ†’ ็ซ‹ๅณๆˆไธบๆ™บ่ƒฝไฝ“ๅฏ็”จ็š„ๅทฅๅ…ท ้œ€่ฆๅทฒๆŒ‰ MCP ๅ่ฎฎๅฎž็Žฐๅฅฝ็š„ๆœๅŠกๅ™จ
ๅฏผ่ˆชๆ–นๅผ ๅฑ‚็บงๆ–‡ไปถๅคนๆ ‘๏ผˆlistTools("/system")๏ผ‰ ๅทฒๆณจๅ†ŒๆœๅŠกๅ™จ/ๅทฅๅ…ท็š„ๅนณ้“บๅˆ—่กจ๏ผŒ้€š่ฟ‡ Tool Groups ๅˆ†็ป„
่”้‚ฆๆžถๆž„ ๆ— ้™ๅตŒๅฅ—็š„ REMOTE ่Š‚็‚น๏ผˆhub โ†’ hub โ†’ hub๏ผ‰ ๅ•ๅฑ‚็ป“ๆž„๏ผšๅฎขๆˆท็ซฏ โ†’ ็ฝ‘ๅ…ณ โ†’ ๆœๅŠกๅ™จ๏ผŒๆ— ้€’ๅฝ’ๅตŒๅฅ—
MCP ้›†ๆˆ ๅฐ† MCP ไฝœไธบๅˆ†็ฑปไน‹ไธ€ๆ”ฏๆŒ๏ผˆๆ— ็Šถๆ€ + ๆœ‰็Šถๆ€่ฟ›็จ‹ๆฑ ๏ผ‰ MCP ๆ˜ฏๅ”ฏไธ€ๆ”ฏๆŒ็š„ๆ ผๅผ
MCP โ†’ ๅŽŸ็”Ÿๅทฅๅ…ท่ฝฌๆข ๆ”ฏๆŒ๏ผˆMCP Promote๏ผ‰ ไธๆ”ฏๆŒ
IDE ้›†ๆˆ ๆ”ฏๆŒ๏ผˆSublime Merge ๅทฎๅผ‚ๅฏนๆฏ”ใ€replace-literalใ€ๅŽŸ็”Ÿๆ’ค้”€๏ผ‰ ไธๆ”ฏๆŒ
่ฎฟ้—ฎๆŽงๅˆถ ็ฎก็†้ขๆฟไธญๅผ€ๅ…ณๅทฅๅ…ท๏ผŒๅŒๅฑ‚ๅฏ†็ ๏ผˆagent/admin๏ผ‰ ACL/RBACใ€Tool Groupsใ€ๆŒ‰ๅฎขๆˆท็ซฏๅˆ†้…ไปค็‰Œ๏ผˆไผไธšๆจกๅผไธ‹๏ผ‰

๐ŸŽฏ ๆ ธๅฟƒๆžถๆž„็†ๅฟต

  1. ๆ— ้œ€ Docker (Zero Docker Needed): ๅŸบไบŽ Bun ๆž„ๅปบ๏ผŒไปฃ็ ็›ดๆŽฅๅœจๆ“ไฝœ็ณป็ปŸ้š”็ฆป็š„ไธดๆ—ถๅทฅไฝœๅŒบ่ฟ่กŒใ€‚ๅณไฝฟๅœจ Raspberry Pi ๆˆ–่ฝป้‡ VPS ไธŠไนŸ่ƒฝๆฏซ็ง’็บงๆž้€Ÿๅ“ๅบ”ใ€‚
  2. ๅคš่ฏญ่จ€ๆ— ็ผๅ…ผๅฎน: ไปปไฝ• Bun, Node.js, Python, Go, Bash, PHP, Deno, C++ ่„šๆœฌๅ‡ๅฏ็›ดๆŽฅไฝœไธบๆŠ€่ƒฝ่ฟ่กŒใ€‚็ปˆ็ซฏ่ƒฝๆ‰ง่กŒ็š„ๅ‘ฝไปค๏ผŒๅ‡ๅฏ่ฝฌไธบ AI ๅทฅๅ…ทใ€‚
  3. ๅˆ†ๅฑ‚ๆŠ€่ƒฝๆ ‘ๅฏผ่ˆช: ๆŠ€่ƒฝๆŒ‰ๆ–‡ไปถ็›ฎๅฝ•็ป„็ป‡๏ผŒๆจกๅž‹ๆ— ้œ€ๅธธ้ฉปๆ•ฐ็™พไธชๅทฅๅ…ทๆ่ฟฐ๏ผŒๅช้œ€้€š่ฟ‡ listTools() ๆต่งˆ็›ฎๅฝ•ๅนถ้€š่ฟ‡ callTool() ๆŒ‰้œ€่ฐƒ็”จใ€‚
  4. ๆ— ้™่”้‚ฆ็ฝ‘็ปœ (Infinite Federation): ๆ”ฏๆŒๅคšไธช ToolHub ่Š‚็‚น็›ธไบ’ๆŒ‚่ฝฝไธบๆ ‘็Šถๅญ็›ฎๅฝ•๏ผŒ่‡ชๅŠจๅค„็†่ทฏๅพ„่ง„่ŒƒๅŒ–ๅนถๆœ็ปๅพช็Žฏๅผ•็”จใ€‚
  5. ๅŒๆจก MCP ็”Ÿๆ€: ๅ…จ้ขๆ”ฏๆŒ Model Context Protocol (MCP)๏ผŒๆไพ›ๆ ‡ๅ‡† Stdio ๆจกๅผไธŽ้’ˆๅฏนๅคๆ‚ไผš่ฏ๏ผˆPuppeteerใ€SSHใ€ๆ•ฐๆฎๅบ“๏ผ‰็š„ๅธธ้ฉป็ƒญ่ฟ›็จ‹ๆฑ  (Stateful Persistent Pool)ใ€‚

๐Ÿ›  ็ณป็ปŸๆžถๆž„ๅ›พ

                                  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                                  โ”‚   AI AGENT / SDK CLIENTโ”‚
                                  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                              โ”‚ HTTP Requests
                                              โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                                   TOOL HUB CORE SYSTEM                                  โ”‚
โ”‚                                                                                         โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚                              Fastify Router & Auth                                โ”‚  โ”‚
โ”‚  โ”‚   โ€ข Agent Auth (x-agent-password)         โ€ข Admin Auth (x-admin-password)         โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚         โ”‚                                          โ”‚                                    โ”‚
โ”‚         โ–ผ                                          โ–ผ                                    โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                             โ”‚
โ”‚  โ”‚  Agent API   โ”‚                          โ”‚  Admin API   โ”‚                             โ”‚
โ”‚  โ”‚  (/*)        โ”‚                          โ”‚ (/admin/api/*)                             โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                             โ”‚
โ”‚         โ”‚                                         โ”‚                                     โ”‚
โ”‚         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                                     โ”‚
โ”‚                              โ–ผ                                                          โ”‚
โ”‚                     UNIFIED ROUTER ENGINE                                               โ”‚
โ”‚                              โ”‚                                                          โ”‚
โ”‚      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                                  โ”‚
โ”‚      โ–ผ                       โ–ผ                       โ–ผ                                  โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”             โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”             โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                             โ”‚
โ”‚ โ”‚  LOCAL  โ”‚             โ”‚ REMOTE  โ”‚             โ”‚   MCP   โ”‚                             โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜             โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜             โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜                             โ”‚
โ”‚      โ”‚                       โ”‚                       โ”‚                                  โ”‚
โ”‚      โ–ผ                       โ–ผ                       โ–ผ                                  โ”‚
โ”‚  Workspace              HubSDK Proxy            MCP Engine                              โ”‚
โ”‚  Execution             (Infinite Tree)      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                         โ”‚
โ”‚  (Bun/Py/Go...)                             โ–ผ                 โ–ผ                         โ”‚
โ”‚                                         Stateless        Stateful Pool                  โ”‚
โ”‚                                        (Stdio Spawn)    (Persistent PID)                โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โš™๏ธ ๆ‰ง่กŒๆตๆฐด็บฟ: Runner $\rightarrow$ Tool $\rightarrow$ Response

1. ๅˆ›ๅปบ้š”็ฆปๅทฅไฝœๅŒบ  โ†’  2. ๅ†™ๅ…ฅๆ–‡ไปถ/ๅ‚ๆ•ฐ  โ†’  3. ๅฎ‰่ฃ…ไพ่ต–ๅŒ…  โ†’  4. ่ฟ่กŒไธŽๆ•่Žท่พ“ๅ‡บ
 (/tmp/hub_run_xxx/)     (Code & Deps)       (installCmd)       (runCmd + ENV)
  1. ๅทฅไฝœๅŒบ้š”็ฆป: ๅœจ็ณป็ปŸไธดๆ—ถ็›ฎๅฝ•ๅˆ›ๅปบไธ“ๅฑž็‹ฌ็ซ‹ๆ–‡ไปถๅคน (/tmp/hub_run_<timestamp>_<hash>)ใ€‚
  2. ไปฃ็ ไธŽไพ่ต–ๅ†™ๅ…ฅ: ๅˆ†ๅˆซๅ†™ๅ…ฅ codeFileName ไธŽ depFileNameใ€‚
  3. ๅ‚ๆ•ฐๆณจๅ…ฅ: ็”Ÿๆˆ input.json ๅนถๅŒๆญฅๆ˜ ๅฐ„่‡ณ INPUT_<KEY_NAME> ็Žฏๅขƒๅ˜้‡ใ€‚
  4. ไพ่ต–ๅฎ‰่ฃ…: ่‹ฅๅญ˜ๅœจไพ่ต–ๅˆ™ๆ‰ง่กŒ installCmd๏ผˆๅฆ‚ pip install -r requirements.txt๏ผ‰ใ€‚
  5. ๆ‰ง่กŒไธŽ้ฅๆต‹: ่ฟ่กŒ runCmd๏ผŒๆ•่Žท output.json ๆˆ– stdout๏ผŒๆ‰ง่กŒ่€—ๆ—ถไธŽๆ—ฅๅฟ—ๅŒๆญฅๅญ˜ๅ…ฅๅฎก่ฎกๆ—ฅๅฟ—ใ€‚
  6. ็Žฏๅขƒ้”€ๆฏ: ๅฝปๅบ•ๆธ…็†ๅนถๅˆ ้™คไธดๆ—ถๅทฅไฝœๅŒบใ€‚

๐Ÿ”Œ IDE ๆ’ไปถไธŽๆŠ€่ƒฝๅŒ… (.toolpack)

1. Sublime Text ๆกฅๆŽฅๆ’ไปถ

  • ๅŽŸๅญ็บงไปฃ็ ๆ›ฟๆข (replace-literal): ๆ™บ่ƒฝไฝ“ 2ms ๅ†…ๅฎŒๆˆ็ฒพ็กฎ่กŒ็บงๆ›ฟๆข๏ผŒๆœ็ปๅ…จๆ–‡ไปถ้‡ๅ†™ๅธฆๆฅ็š„ Token ๆตช่ดนใ€‚
  • Sublime Merge ๅฏ่ง†ๅŒ– Diff: ๅœจ็ผ–่พ‘ๅ™จๅ†…ๅฎžๆ—ถ้ข„่งˆ AI ไฟฎๆ”น๏ผŒไธ€้”ฎๆŽฅๅ—ๆˆ–ๆ‹’็ปๅ˜ๆ›ดใ€‚
  • ๅŽŸ็”Ÿๆ’ค้”€ๆ ˆๆ”ฏๆŒ: AI ็š„ไฟฎๆ”นๅฎŒ็พŽ้›†ๆˆๅœจ็ผ–่พ‘ๅ™จ็š„ Ctrl+Z ๅކๅฒ่ฎฐๅฝ•ไธญใ€‚

2. ๅฏผๅ…ฅใ€ๅฏผๅ‡บไธŽ็‰ˆๆœฌๆŽงๅˆถ (.toolpack & ToolVersion)

  • ๆŠ€่ƒฝๅŒ…ๅ…ฑไบซ: ๆ”ฏๆŒๅฐ†ๅˆ†็ฑป็›ฎๅฝ•ใ€ไปฃ็ ๅŠ Schema ๆ•ดไฝ“ๅฏผๅ‡บไธบ .toolpackใ€‚
  • ็‰ˆๆœฌๅฟซ็…ง: ๆฏๆฌกไฟๅญ˜่‡ชๅŠจ็”Ÿๆˆ็‰ˆๆœฌไฟฎ่ฎขๅฟซ็…ง๏ผŒๆ”ฏๆŒไธ€้”ฎๅ›žๆปšใ€‚

๐Ÿ—‚ ็›ฎๅฝ•ๅˆ†็ฑป็ฑปๅž‹

ๅˆ†็ฑป็ฑปๅž‹ ๅฎšไฝ ่ฟ่กŒๆœบๅˆถ
LOCAL ๆœฌๅœฐๅทฅๅ…ท็›ฎๅฝ• ้€š่ฟ‡ๅ†…็ฝฎ่ฟ่กŒๅ™จๅผ•ๆ“ŽๅœจๆœฌๅœฐๅทฅไฝœๅŒบๆ‰ง่กŒใ€‚
REMOTE ToolHub ่Š‚็‚นไปฃ็† ้€š่ฟ‡ HubSDK ้€’ๅฝ’่ฝฌๅ‘่‡ณ่ฟœ็จ‹่Š‚็‚นใ€‚
MCP ๅค–้ƒจ MCP ๆœๅŠก็ซฏ ้€š่ฟ‡ Stdio ่ฟ›็จ‹้€šไฟก้›†ๆˆ Model Context Protocolใ€‚

โšก MCP ็”Ÿๆ€็‰นๆ€ง

  1. Stateless MCP (Stdio): ๆฏๆฌก่ฐƒ็”จๅณๆ—ถๆ‰ง่กŒ็”Ÿๅ‘ฝๅ‘จๆœŸ๏ผšspawn $\rightarrow$ initialize $\rightarrow$ tools/call $\rightarrow$ ้€€ๅ‡บใ€‚
  2. Stateful MCP Pool (mcpIsStateful): ไธบๅคๆ‚ไผš่ฏ๏ผˆPuppeteer ๆต่งˆๅ™จใ€SSH ็ญ‰๏ผ‰ไฟๆŒๅ†…ๅญ˜ๅธธ้ฉปใ€‚ๅŽ็ปญ่ฐƒ็”จไป…้œ€ 10โ€“30msใ€‚็ฉบ้—ฒ 5 ๅˆ†้’Ÿ่‡ชๅŠจ้‡Šๆ”พ (TTL=300s)๏ผŒๅผ‚ๅธธ้€€ๅ‡บ่‡ชๅŠจๆขๅคใ€‚
  3. MCP Promote: ไธ€้”ฎๅฐ† MCP ๅŠจๆ€ๅทฅๅ…ท่ฝฌๆขไธบๆ•ฐๆฎๅบ“ๅŽŸ็”Ÿๅฏ็ผ–่พ‘็š„ๆœฌๅœฐ Toolใ€‚

๐Ÿค– ๆ™บ่ƒฝไฝ“ XML ๆ ‡็ญพๅ่ฎฎ

1. ๆต่งˆ็›ฎๅฝ•ๆŠ€่ƒฝ

<hub>listTools("/system")</hub>

2. ๆ‰ง่กŒๅทฅๅ…ท

<hub>callTool("/sublime/replace-literal", {
  "find": "const PORT = 3000;",
  "replace": "const PORT = 8080;"
})</hub>

๐Ÿ”’ ๅฎ‰ๅ…จๆœบๅˆถ

  • ๆ™บ่ƒฝไฝ“่ฎค่ฏ (x-agent-password): ไฟๆŠคๆŠ€่ƒฝ็›ฎๅฝ•ๆŸฅ่ฏขไธŽๆ‰ง่กŒๆŽฅๅฃ (GET /*, POST /*)ใ€‚
  • ็ฎก็†ๅŽๅฐ่ฎค่ฏ (x-admin-password): ไฟๆŠค็ฎก็†ๆŽงๅˆถๅฐๅŠๆ ธๅฟƒ้…็ฝฎๆŽฅๅฃ (/admin/*)ใ€‚

๐Ÿ“ฆ ๅฟซ้€ŸๅฏๅŠจ

# 1. ๅ…‹้š†ไปฃ็ ไป“ๅบ“
git clone https://github.com/Talos-Popcorn/toolhub.git
cd toolhub

# 2. ๅฎ‰่ฃ…ไพ่ต–
bun install

# 3. ๆŽจ้€ Prisma ็ป“ๆž„่‡ณๆ•ฐๆฎๅบ“
bun run db:push

# 4. ไบคไบ’ๅผๅฎ‰่ฃ…ๅ‘ๅฏผไธŽๆ•ฐๆฎๅบ“ๅกซๅ…… (Seed)
# (ๆ”ฏๆŒ้€‰ๆ‹ฉ็ณป็ปŸๆ็คบ่ฏ่ฏญ่จ€ EN/RU/ZH ๅŠ่‡ชๅฎšไน‰็ฎก็†ๅ‘˜/ๆ™บ่ƒฝไฝ“ๅฏ†้’ฅ)
bun run db:seed

# ่‡ชๅŠจๅŒ–/CI ้™้ป˜ๆจกๅผ:
# bun run prisma/seed.ts --lang=zh --admin-pass=admin --agent-pass=123

# 5. ๅฏๅŠจๅผ€ๅ‘ๆœๅŠกๅ™จ
bun run dev
  • ๆŽงๅˆถๅฐ็•Œ้ข: http://localhost:5173/admin/ (็”Ÿไบง็Žฏๅขƒไธบ 3000 ็ซฏๅฃ)
  • Swagger ๆŽฅๅฃๆ–‡ๆกฃ: http://localhost:3000/docs (ไป…ๅœจ bun run dev ๅผ€ๅ‘ๆจกๅผไธ‹ๅผ€ๅฏ)
  • ้ป˜่ฎค็ฎก็†ๅ‘˜ๅฏ†็ : admin (ๆˆ–ๅฎ‰่ฃ…ๆ—ถๆ‰€่ฎพๅฏ†็ )
  • ้ป˜่ฎคๆ™บ่ƒฝไฝ“ๅฏ†้’ฅ: 123 (ๆˆ–ๅฎ‰่ฃ…ๆ—ถๆ‰€่ฎพๅฏ†้’ฅ)

๐Ÿ’ป JS/TS SDK ๆŽฅๅ…ฅ็คบไพ‹

import { HubSDK } from './SDK/JS/sdk';

const hub = new HubSDK('http://localhost:3000', '123');

async function runAgentLoop(userQuery: string) {
  const systemPrompt = await hub.getSmartPrompt();
  
  const messages = [
    { role: 'system', content: systemPrompt },
    { role: 'user', content: userQuery }
  ];

  let aiResponse = await llm.generate(messages);
  const action = await hub.processAgentResponse(aiResponse);

  if (action.called) {
    messages.push({ role: 'assistant', content: aiResponse });
    messages.push({ 
      role: 'user', 
      content: `HUB_RESULT: ${JSON.stringify(action.result)}` 
    });

    const finalResponse = await llm.generate(messages);
    console.log('ๆ™บ่ƒฝไฝ“ๅ“ๅบ”็ป“ๆžœ:', finalResponse);
  }
}

๐Ÿš€ ็”Ÿไบง็Žฏๅขƒ้ƒจ็ฝฒ

# ็ผ–่ฏ‘ๅ‰็ซฏ้™ๆ€่ต„ๆบๅนถๅŒๆญฅๆ•ฐๆฎๅบ“
bun run build

# ๅฏๅŠจ็”ŸไบงๆœๅŠก
bun run start

โš–๏ธ ่ฎธๅฏ่ฏไธŽๅ•†ไธš็”จ้€”

ๆœฌ้กน็›ฎๅŸบไบŽ AGPL-3.0 ่ฎธๅฏ่ฏ ๅผ€ๆบๅˆ†ๅ‘๏ผˆไธชไบบไฝฟ็”จไธŽๅผ€ๆบ่ก็”Ÿไฟฎๆ”นๅฎŒๅ…จๅ…่ดน๏ผ‰ใ€‚

ๅ•†ไธšๆŽˆๆƒ๏ผš ่‹ฅ่ฆๅœจไธๅ— AGPL-3.0 ไผ ๆŸ“ๆ€งๅผ€ๆบ็บฆๆŸ็š„ๅ‰ๆไธ‹๏ผŒๅฐ† ๐Ÿ› ๏ธ ToolHub ้ƒจ็ฝฒไบŽๅฐ้—ญ็š„ไผไธšๅ†…็ฝ‘ๆˆ–้›†ๆˆ่‡ณไธ“ๆœ‰ๅ•†ไธšไบงๅ“ไธญ๏ผŒ้œ€่Žทๅ–ๅ•†ไธšๆŽˆๆƒ่ฎธๅฏ่ฏใ€‚
่”็ณป้‚ฎ็ฎฑ๏ผšcollab@labstudio.techใ€‚


Built for the future of autonomous, distributed AI agents.

About

๐Ÿ› ๏ธ toolhub - Turn ANY console script into an LLM tool in 2 seconds. Lightweight, self-hosted, tree-structured alternative to MCP & LangChain.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages