MCP TypeScript Server Starter について
MCP サーバーを開発する人向けの TypeScript スターターです。echo の例とローカルテスト、リモートデプロイの設定を備え、STDIO と SSE の両モードに対応します。
主な機能
- 01echo ツール、リソース、プロンプトの例
- 02STDIO と SSE の通信モード
- 03ホットリロード対応の開発サーバー
- 04テスト用インスペクター内蔵
- 05低レベル API による別実装
活用シーン
- 01TypeScript で MCP サーバーの試作
- 02ツール、リソース、プロンプトのローカルテスト
- 03リモート接続用 SSE サーバーのデプロイ
MCP 対応
MCP クライアントに echo ツール、リソース、プロンプトの例を提供する MCP サーバーのスターターです。STDIO と SSE の接続に対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP TypeScript Server Starter
TypeScript で Model Context Protocol(MCP)サーバーを構築するためのスタータープロジェクトです。このプロジェクトには、MCP の主要な機能を実演するシンプルなエコーサーバーの実装が含まれています。
クイックスタートチェックリスト
📥 インストール
- リポジトリをクローンします:
git clone https://github.com/ralf-boltshauser/mcp-typescript-server-starter.git cd mcp-typescript-server-starter - 依存関係をインストールします:
pnpm install
🛠️ ローカル開発
- 開発サーバーを起動します:
pnpm dev - http://localhost:6274 でインスペクターにアクセスします
- MCP サーバーをテストします:
- インスペクターで「Connect」をクリックします
- 「Tools」セクションに移動します
- 「List Tools」をクリックします
- 「echo」ツールを選択します
- テストメッセージを入力します
- 「Submit」をクリックします
-
src/index.tsを開いて、次の項目を追加します:- ツール(AI が呼び出せる関数)
- リソース(AI がアクセスできるデータ)
- プロンプト(AI とのやり取りのためのテンプレート)
-
src/index.htmlを更新して、サーバーの説明とドキュメントを記載します
🚀 デプロイ(Coolify の例)
- Coolify でセットアップします:
- リポジトリを接続します
- 詳細設定で:
- GZIP 圧縮を無効にします(SSE に必須)
- ドメインを設定します:
- ドメインを
https://subdomain.yourdomain.com:3001の形式で追加します:3001は重要です。traefik に内部ポートへのバインドを指示します
- ドメインを
- デプロイを確認します:
subdomain.yourdomain.comにアクセスして index.html を確認しますhttps://subdomain.yourdomain.com/sseで SSE 接続をテストします
🔌 デプロイ済みサーバーへの接続
次のコマンドを使用してサーバーに接続します:
npx -y mcp-remote https://subdomain.yourdomain.com/sse
Cursor/Claude Desktop の設定例:
{
"mcpServers": {
"your-server-name": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://subdomain.yourdomain.com/sse"]
},
}
}
機能
- シンプルなエコーサーバーの実装
- ツール、リソース、プロンプトに対応
- TypeScript に対応
- ホットリロード対応の開発サーバー
- テストとデバッグ用の組み込みインスペクター
- STDIO と SSE の両方の通信モードに対応
前提条件
- Node.js(v16 以降)
- pnpm(推奨)または npm
使用モード
このサーバーは、次の 2 つの主要な通信モードに対応しています:
-
STDIO モード
- ローカル開発や基本的なテストに最適です
- プロセス間で直接通信します
- ほとんどの MCP クライアントでデフォルトとして使用されます
- サーバーをローカルで実行するのに最適です
- セットアップも使用も簡単です
-
SSE モード
- 本番環境へのデプロイに適しています
- HTTP/SSE 通信を使用します
- npm パッケージを使って STDIO に変換できます(後述)
- サーバーへのリモートアクセスを可能にします
- よりスケーラブルで、本番環境に適しています
ローカル開発では STDIO を、リモートアクセス用にサーバーをデプロイする場合は SSE を選択してください。
STDIO モード(プロセス間の直接通信)
このモードは、Cursor や Claude Desktop などのツールとの直接統合に最適です。
-
サーバーを設定する
src/index.tsで:- Express/SSE コードを(末尾で)コメントアウトします
- STDIO コードのコメントを解除します(その上にあります)
-
ビルドして実行する
pnpm build node dist/index.cjs
または
pnpm dev # starts the server and the inspector
-
Claude Desktop と統合する
pnpm add-claude⚠️ 注:既存の Claude Desktop 設定は上書きされます。
この Claude Desktop の設定方法は標準的なものです。生成された json は Cursor などでも使用できます!
-
手動で統合する その他のツールでは、次のコマンドを使用します:
node /path/to/your/project/dist/index.cjsまたは
pnpm cmd # this gives you the node .../dist/index.cjs command directly with pwd
SSE モード(HTTP/SSE 通信)
Web ベースのツールやリモート環境へのデプロイに最適なモードです。
-
サーバーの設定
src/index.tsで:- Express/SSE のコード(末尾)を有効にしたままにします
- STDIO のコード(その上)をコメントアウトします
-
ローカル開発
pnpm devサーバーは次のアドレスで利用できます:
- メインエンドポイント: http://127.0.0.1:3001
- SSE エンドポイント: http://127.0.0.1:3001/sse
- テストエンドポイント: http://127.0.0.1:3001/test
- インスペクター: http://127.0.0.1:6274
-
ローカルでの Docker テスト ポートを実際に公開するには、docker compose のオーバーライドが必要です。coolify のような環境にデプロイする場合は不要です。traefik が処理するためです。
docker compose -f docker-compose.yaml -f docker-compose.local.yaml up -
本番環境へのデプロイ(例:Coolify)
- IDE に依頼して、src/index.html をサーバーの説明に合わせて更新します。
- お好みのプラットフォームにサーバーをデプロイします
- 重要:Coolify の詳細設定で:
- GZIP 圧縮を無効にします(SSE ストリームが機能しなくなります)
- ポート 3001 が適切に公開されていることを確認します。ドメインを設定するときは、https://your-domain.com:3001 のように設定します。これにより、traefik にポート 3001 をバインドするよう指示できます。
- サーバーがすべてのインターフェース(0.0.0.0)でリッスンするよう設定します(設定済み)
-
リモートサーバーの使用 デプロイ後、次の方法でサーバーに接続できます:
npx -y mcp-remote https://your-domain.com/sseこれをコマンドとして貼り付け、「node .../dist/index.cjs」を置き換えてください。
プロジェクト構成
src/index.ts- メインのサーバー実装src/low-level-index.ts- 低レベル API を使用した代替実装dist/- コンパイル済み出力ディレクトリ
サーバーの機能
Echo ツール
入力メッセージをそのまま返すシンプルなツールです:
server.tool("echo", { message: z.string() }, async ({ message }) => ({
content: [{ type: "text", text: `Tool echo: ${message}` }],
}));
Echo リソース
URI 経由でアクセスできるリソースです:
server.resource(
"echo",
new ResourceTemplate("echo://{message}", { list: undefined }),
async (uri, { message }) => ({
contents: [
{
uri: uri.href,
text: `Resource echo: ${message}`,
},
],
})
);
Echo プロンプト
メッセージを処理するためのプロンプトテンプレートです:
server.prompt("echo", { message: z.string() }, ({ message }) => ({
messages: [
{
role: "user",
content: {
type: "text",
text: `Please process this message: ${message}`,
},
},
],
}));
実装に関する推奨事項
デバッグメッセージ
デバッグメッセージは、server.server.sendLoggingMessage メソッドを使って送信できます。これにより、サーバーの操作状況を確認できます。
基本的な使い方
server.server.sendLoggingMessage({
level: "info",
data: "Starting server...",
});
これにより、次のことができます:
- サーバーの操作をリアルタイムで追跡する
- 開発中の問題をデバッグする
- 本番環境でサーバーの状態を監視する
インスペクターの右下で確認できます!
環境変数
サーバー側の環境変数(開発者が設定するもので、ユーザー固有ではありません)について:
-
Docker Compose の使用
# docker-compose.yaml services: mmcp-server: environment: - API_KEY=${API_KEY} - DATABASE_URL=${DATABASE_URL}これにより、次のことができます:
- シェルで変数を設定する:
export API_KEY=your-key - Docker Compose が自動的に読み込む
.envファイルを使用する
- シェルで変数を設定する:
-
コードでのアクセス
const apiKey = process.env.API_KEY; const dbUrl = process.env.DATABASE_URL; -
ローカル開発
- プロジェクトのルートに
.envファイルを作成します:API_KEY=sk-123 - シークレットを安全に保つため、
.envを.gitignoreに追加します - 環境変数を設定して開発サーバーを実行します:
pnpm dev
- プロジェクトのルートに
-
本番環境へのデプロイ
- デプロイ先のプラットフォーム(例:Coolify)で環境変数を設定します
- 機密情報をバージョン管理にコミットしないでください
ベストプラクティス
-
エラー処理
- 環境変数に対する適切なエラー処理を必ず実装します
- 必須の変数がない場合は、わかりやすいエラーメッセージを表示します
-
型安全性
- TypeScript で環境変数の型を定義します
- 実行時チェックには、
zodのような検証ライブラリの使用を検討します
-
セキュリティ
- 機密性の高い環境変数をクライアントに公開しないでください
- 開発環境と本番環境では、異なる変数セットを使用します
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。