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への登録


クイックスタート

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: 読み取り専用です。commitpushclone 操作は公開されていません。

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

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


要件

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

  • Git (server-git用)

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

F
license - not found
-
quality - not tested
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TOMJARA/mcp-tool-hub'

If you have feedback or need assistance with the MCP directory API, please join our Discord server