Skip to main content
Glama

MCP Tool Hub

IT自動化チーム向けにTypeScriptで構築された、モジュール式で拡張可能なModel Context Protocolマルチサーバーハブ。

LLMにファイル、Git、Webコンテンツ、永続メモリといった実世界のツールへのアクセス権を与えます。Ansibleを使用して、任意の数のクライアントマシンに同時にデプロイ可能です。


アーキテクチャ

mcp-tool-hub/
├── packages/
│   ├── core/              ← Shared types + BaseMCPServer abstract class
│   ├── server-filesystem/ ← Sandboxed local file access (read/write/list/delete)
│   ├── server-git/        ← Git log, diff, file contents, branches, status
│   ├── server-fetch/      ← Web fetching: HTML, JSON APIs, URL health checks
│   └── server-memory/     ← Persistent JSON knowledge base (survives restarts)
├── host/                  ← Orchestrator: registry + CLI + stdio JSON interface
├── ansible/               ← Playbook, inventory, systemd service templates
└── docs/                  ← How to add new servers (with template)

このアーキテクチャはModel Context Protocolパターンに従っています:

  • 各サーバーは完全に独立しており、独自のパッケージとビルドを持ちます

  • ホスト内のレジストリが、実行時に toolName → server をマッピングします

  • CLIはstdio JSONインターフェースを公開しており、あらゆるLLM統合がstdinで {"toolName":"...", "arguments":{...}} を送信し、stdoutから結果を読み取ります

  • 新しいサーバーの追加 = パッケージの作成、BaseMCPServerの拡張、cli.tsへの登録


Related MCP server: mcp-toolbox

クイックスタート

1. インストールとビルド

git clone https://github.com/your-org/mcp-tool-hub.git
cd mcp-tool-hub
npm install
npm run build

2. 設定

cp .env.example .env
# Edit .env with your paths and settings

3. 実行

# Via npm
npm run start --workspace=host

# Or directly
node host/dist/cli.js

4. ツールの呼び出し

JSONをstdinに送信し、stdoutからJSONを取得します:

echo '{"toolName":"read_file","arguments":{"path":"hello.txt"}}' | node host/dist/cli.js

利用可能なツール

📁 Filesystem Server

すべての操作は MCP_FS_ROOT にサンドボックス化されています。パストラバーサル (../) はブロックされます。

ツール

説明

read_file

ファイル内容の読み取り (utf8またはbase64)

write_file

ファイルへの書き込みまたは追記

list_directory

ディレクトリ内容のリスト表示 (オプションで再帰的)

delete_file

ファイルの削除

move_file

ファイルの移動または名前変更

get_file_info

パスのサイズ、日付、種類の取得

🔀 Git Server

読み取り専用。書き込み操作はありません。

ツール

説明

git_log

リポジトリまたはファイルのコミット履歴

git_show_file

特定のコミット/ブランチ時点のファイル内容

git_diff

2つの参照間の差分

git_status

ワーキングツリーの状態

git_branches

ブランチのリスト表示 (ローカル + オプションでリモート)

git_show_commit

コミットの詳細と差分

🌐 Fetch Server

MCP_FETCH_ALLOWED_DOMAINS を介したオプションのドメイン許可リストをサポートしています。

ツール

説明

fetch_url

URLからHTMLまたはテキストを取得

fetch_json

JSON APIレスポンスの取得と解析

check_url

URLが到達可能か確認 (HEADリクエスト)

🧠 Memory Server

再起動後も永続化されます。JSONファイルによってバックアップされます。

ツール

説明

memory_set

キー、名前空間、タグを指定して値を保存

memory_get

キーによる値の取得

memory_search

すべてのエントリに対する全文検索

memory_delete

エントリの削除

memory_list_namespaces

カウント付きの名前空間リスト表示

memory_clear_namespace

名前空間内の全エントリを削除


Ansibleデプロイ

すべてのクライアントマシンに同時にデプロイします:

cd ansible

# First time
ansible-playbook -i inventory.yml deploy-mcp-hub.yml

# Update only (rebuild + restart)
ansible-playbook -i inventory.yml deploy-mcp-hub.yml --tags update

# Deploy to specific group
ansible-playbook -i inventory.yml deploy-mcp-hub.yml --limit servers

プレイブックの内容:

  1. Node.js 20のインストール (存在しない場合)

  2. 専用の mcp-hub システムユーザーの作成

  3. プロジェクトのコピーとビルド

  4. Ansible変数から .env 設定を書き込み

  5. systemdサービスのインストールと開始 (失敗時に自動再起動)

inventory.yml のホストごとの変数により、マシングループごとに異なる許可ドメイン、ログレベル、パスを設定できます。


新しいサーバーの追加

コメント付きの完全なテンプレートについては docs/adding-a-new-server.template.ts を参照してください。

要約:

// 1. Create packages/server-myservice/src/my-server.ts
export class MyServer extends BaseMCPServer {
  constructor(options: MyOptions) {
    super(SERVER_INFO, options);
    this.registerTool("my_tool", this.handleMyTool.bind(this));
  }
  private async handleMyTool(args) {
    return this.ok({ result: "done" });
  }
}

// 2. Register in host/src/cli.ts
hub.use(new MyServer({ apiKey: process.env.MY_API_KEY! }));

アイデア: server-slack, server-postgres, server-docker, server-ansible, server-ssh, server-jira


環境変数

変数

デフォルト

説明

MCP_DATA_DIR

./mcp-data

すべてのハブデータのルート

MCP_FS_ROOT

./mcp-data/files

ファイルシステムサンドボックスのルート

MCP_GIT_WORKSPACE

./mcp-data/repos

Gitリポジトリのベースパス

MCP_MEMORY_PATH

./mcp-data/memory.json

メモリストアファイル

MCP_FETCH_ALLOWED_DOMAINS

(空 = すべて)

カンマ区切りのドメイン許可リスト

MCP_LOG_LEVEL

info

`debug

info

warn

error`


セキュリティに関する注意

  • ファイルシステム: 厳密にサンドボックス化されています。パストラバーサル攻撃はデータではなくエラーを返します。

  • Git: 読み取り専用です。commit、push、clone 操作は公開されていません。

  • Fetch: オプションのドメイン許可リストにより、内部サービスへのSSRFを防ぎます。

  • Systemdサービス: PrivateTmp=true および NoNewPrivileges=true を設定した非rootユーザーとして実行されます。


要件

  • Node.js ≥ 18 (ネイティブ fetch API用)

  • Git (server-git用)

  • systemdを搭載したLinux (Ansibleデプロイ用)

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers