Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Unified MCP Hub for managing multiple Model Context Protocol servers
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"hatago-hub": {
"command": "npx",
"args": [
"-y",
"@himorishige/hatago-mcp-hub"
]
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add hatago-hub -- npx -y @himorishige/hatago-mcp-hubวางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"hatago-hub": {
"command": "npx",
"args": [
"-y",
"@himorishige/hatago-mcp-hub"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"hatago-hub": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@himorishige/hatago-mcp-hub"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 9 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub himorishige ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.0.16) เข้า registry 14 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, MCP Tennis Match Data
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
ATP and WTA match results, schedules, and rankings by date
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
English | 日本語
Hatago (旅籠) — A relay point connecting modern AI tools with MCP servers.
Hatago MCP Hub is a lightweight hub that unifies access to multiple MCP (Model Context Protocol) servers from tools like Claude Code, Codex CLI, Cursor, Windsurf, and VS Code.
docs/README.mdpackages/mcp-hub/README.mdDev.to: Getting Started with Multi-MCP Using Hatago MCP Hub — One Config to Connect Them All
npx @himorishige/hatago-mcp-hub serve --httpnodemon --exec "hatago serve --http" --watch hatago.config.jsonpm2 start "hatago serve" --watch hatago.config.jsonnotifications/tools/list_changed notificationnotifications/progresshatago://servers - JSON snapshot of currently connected servers (id, status, type, tools, resources, prompts)${VAR} and ${VAR:-default} syntaxextends field for DRY principleExternal packages (server/test-utils) use a thin IHub interface to avoid tight coupling with the concrete class.
import type { IHub } from '@himorishige/hatago-hub';
import { createHub } from '@himorishige/hatago-hub/node';
const hub: IHub = createHub({ preloadedConfig: { data: { version: 1, mcpServers: {} } } }) as IHub; await hub.start(); hub.on('tool:called', (evt) => { /* metrics, logs */ }); await hub.stop();
Extracted modules for thin hub:
packages/hub/src/rpc/handlers.tspackages/hub/src/http/handler.tspackages/
├── mcp-hub/ # Main npm package (@himorishige/hatago-mcp-hub) ├── server/ # Server implementation (@himorishige/hatago-server) ├── hub/ # Hub core (@himorishige/hatago-hub) ├── core/ # Shared types (@himorishige/hatago-core) ├── runtime/ # Runtime components (@himorishige/hatago-runtime) ├── transport/ # Transport layer (@himorishige/hatago-transport) ├── cli/ # CLI tools (@himorishige/hatago-cli) ├── hub-management/ # Management components (@himorishige/hatago-hub-management) └── test-fixtures/ # Test utilities
# Initialize configuration
npx @himorishige/hatago-mcp-hub init
npx @himorishige/hatago-mcp-hub serve --stdio --config ./hatago.config.json
npx @himorishige/hatago-mcp-hub serve --http
# Install globally
npm install -g @himorishige/hatago-mcp-hub
hatago init hatago serve
# Install as dependency
npm install @himorishige/hatago-mcp-hub
{ "scripts": { "mcp": "hatago serve" } }
Add to .mcp.json:
{
"mcpServers": { "hatago": { "command": "npx", "args": [ "@himorishige/hatago-mcp-hub", "serve", "--stdio", "--config", "./hatago.config.json" ] } } }
Add to ~/.codex/config.toml:
[mcp_servers.hatago]
command = "npx" args = ["-y", "@himorishige/hatago-mcp-hub", "serve", "--stdio", "--config", "./hatago.config.json"]
Add to .mcp.json:
{
"mcpServers": { "hatago": { "url": "http://localhost:3535/mcp" } } }
Add to ~/.codex/config.toml:
[mcp_servers.hatago]
command = "npx" args = ["-y", "mcp-remote", "http://localhost:3535/mcp"]
For testing and debugging:
# Start in HTTP mode
hatago serve --http --port 3535
Visit MCP Inspector
Enable lightweight in-memory metrics and expose an HTTP endpoint:
HATAGO_METRICS=1 hatago serve --http --port 3535
Notes:
HATAGO_LOG=json (respecting HATAGO_LOG_LEVEL).Create hatago.config.json:
{
"$schema": "https://raw.githubusercontent.com/himorishige/hatago-mcp-hub/main/schemas/config.schema.json", "version": 1, "logLevel": "info", "mcpServers": { "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"] }, "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"], "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" } } } }
{
"mcpServers": { "deepwiki": { "url": "https://mcp.deepwiki.com/sse", "type": "sse" }, "custom-api": { "url": "https://api.example.com/mcp", "type": "http", "headers": { "Authorization": "Bearer ${API_KEY}" } } } }
Group servers with tags in a single configuration file:
{
"mcpServers": { "filesystem-dev": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "."], "tags": ["dev", "local"] }, "github-prod": { "url": "https://api.github.com/mcp", "type": "http", "tags": ["production", "github"] }, "database": { "command": "mcp-server-postgres", "tags": ["dev", "production", "database"] } } }
Start with specific tags:
# Only start servers tagged as "dev"
hatago serve --tags dev
hatago serve --tags dev,test
hatago serve --tags 開発,テスト
Split configurations by environment using the extends field:
Base configuration (~/.hatago/base.config.json):
{
"version": 1, "logLevel": "info", "mcpServers": { "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"], "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" } }, "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "."] } } }
Work configuration (./work.config.json):
{
"extends": "~/.hatago/base.config.json", "logLevel": "debug", "mcpServers": { "github": { "env": { "GITHUB_TOKEN": "${WORK_GITHUB_TOKEN}", "DEBUG": null } }, "internal-tools": { "url": "https://internal.company.com/mcp", "type": "http", "headers": { "Authorization": "Bearer ${INTERNAL_TOKEN}" } } } }
Features:
"extends": ["./base1.json", "./base2.json"]~, relative, and absolute pathsnull to remove inherited env vars| Strategy | Tag-based | Inheritance-based |
|---|---|---|
| Files | Single config | Multiple configs |
| Switch | --tags option | --config option |
| Management | Centralized | Distributed |
| Best for | Team sharing, Simple setups | Complex environments, Personal customization |
Supports Claude Code compatible syntax:
${VAR} - Expands to the value of VAR (error if undefined)${VAR:-default} - Uses default value if VAR is undefinedhatago initCreate configuration file with interactive setup:
hatago init # Interactive mode
hatago init --mode stdio # STDIO mode config hatago init --mode http # HTTP mode config hatago init --force # Overwrite existing
hatago serveStart MCP Hub server:
hatago serve --stdio --config ./hatago.config.json # STDIO mode (default, requires config)
hatago serve --http # HTTP mode (config optional) hatago serve --config custom.json # Custom config hatago serve --verbose # Debug logging hatago serve --tags dev,test # Filter servers by tags hatago serve --env-file ./.env # Load variables from .env before start (repeatable) hatago serve --env-override # Override existing env vars when using --env-file
Use --env-file to load variables before config parsing. This helps resolve ${VAR} and ${VAR:-default} placeholders without exporting variables globally.
KEY=VALUE, export KEY=VALUE, # comments, blank lines.\n, \r, \t.~/ expanded to home.process.env keys are preserved unless --env-override is provided.import { startServer } frตัดมาแค่ช่วงต้น อ่านต่อใน repo