mcpField
M
MCP Server

MCP Server

ローカル
github.com/kattatzu-resources開発ツール478 週間前に更新

MCP Server について

MCP Serverは、MCPサーバーを構築する開発者向けのNode.js実装です。レイヤー化されたクリーンアーキテクチャを採用し、SSEとSTDIOのトランスポートに対応し、ツール、リソース、プロンプトを拡張できます。

主な機能

  1. 01SSEとSTDIOのトランスポート
  2. 02レイヤー化されたクリーンアーキテクチャ
  3. 03ツール、リソース、プロンプトの拡張
  4. 04ログとエラー処理
  5. 05テスト対応

活用シーン

  1. 01HTTP SSEでMCPサーバーを構築
  2. 02STDIOでローカルMCPサーバーを実行
  3. 03カスタムツール、リソース、プロンプトの追加

MCP 対応

MCPサーバーを実装し、SSEまたはSTDIO経由でクライアントと通信します。拡張可能なツール、リソース、プロンプトを提供できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"kattatzu-resources": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/inspector"
]
}
}
}
起動コマンドnpx -y @modelcontextprotocol/inspector

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@modelcontextprotocol/inspector

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

MCP サーバー

License: MIT Node.js: ≥18

AI モデルとリアルタイムで通信するために、複数のトランスポート方式(SSE および STDIO)をサポートする、堅牢な Model Context Protocol(MCP)サーバー実装です。

🚀 機能

  • 完全な MCP 実装:Model Context Protocol の完全かつ標準準拠の実装
  • 複数のトランスポート:SSE(Server-Sent Events)および STDIO によるシームレスな通信
  • 堅牢なアーキテクチャ:保守性と拡張性を高めるため、クリーンアーキテクチャと SOLID 原則に基づいて構築
  • 強力なツール群:ツール、リソース、プロンプトを簡単に拡張可能
  • 開発者に優しい設計:包括的なログ記録、エラー処理、テストをサポート

🏗️ アーキテクチャ

SOLID 原則に準拠した、クリーンなレイヤーアーキテクチャを採用しています。

レイヤー役割コンポーネント
ドメイン中核となるビジネスロジックインターフェース、モデル、エンティティ
アプリケーションユースケース、アプリケーションのフローサービス、ユースケース、DTO
インフラストラクチャ技術的な処理実装、アダプター、外部サービス
プレゼンテーションユーザーインターフェースAPI コントローラー、HTTP エンドポイント
アーキテクチャ図
┌─────────────────────┐      ┌─────────────────────┐
│  Presentation       │      │  Application        │
│  Layer              │      │  Layer              │
│  - Express API      │─────▶│  - Use Cases        │
│  - Controllers      │      │  - Services         │
└─────────────────────┘      └──────────┬──────────┘
                                        │
                                        ▼
┌─────────────────────┐      ┌─────────────────────┐
│  Infrastructure     │      │  Domain             │
│  Layer              │◀─────│  Layer              │
│  - Implementations  │      │  - Interfaces       │
│  - Adapters         │      │  - Models           │
└─────────────────────┘      └─────────────────────┘

💻 要件

  • Node.js 18 以上
  • Yarn または npm パッケージマネージャー

📦 インストール

# Clone the repository
git clone https://github.com/your-username/mcp-server.git
cd mcp-server

# Install dependencies
yarn install

# Build the project
yarn build

🚀 サーバーの起動

# Start the server
yarn start

# Build and start in one command (for development)
yarn rebuild

デフォルトでは、サーバーはポート 3001 で起動します。PORT 環境変数を使用して設定できます。

🔌 トランスポートの選択肢

MCP サーバーは、次の 2 つのトランスポート方式をサポートしています。

トランスポート説明用途
SSEHTTP 経由の Server-Sent EventsWeb アプリケーション、ブラウザーのクライアント
STDIO標準入出力ストリームCLI ツール、ローカルアプリケーション

🛣️ API エンドポイント

  • SSE:/sse - リアルタイム通信のための SSE 接続を確立します
  • メッセージ:/messages - JSON-RPC メッセージをサーバーに送信します

🧪 テスト

公式の MCP Inspector ツールを使用して、サーバーの実装をテストします。

  1. MCP サーバーをビルドして起動します
yarn build
yarn rebuild  # if using SSE transport (builds & starts)
# OR
yarn start    # manual start
  1. サーバーに対して Inspector を実行します
npx @modelcontextprotocol/inspector node build/index.js
  1. Inspector UI にアクセスします http://127.0.0.1:6274 🚀

🧩 機能の拡張

新しいツールの追加
// tools/custom/my-tool.ts
import { z } from "zod";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { ITool } from "../core/domain/interfaces/tool.interface.js";
import { ILogger } from "../core/domain/interfaces/logger.interface.js";

export class MyTool implements ITool {
    private readonly logger: ILogger;

    constructor(logger: ILogger) {
        this.logger = logger;
    }

    public register(server: McpServer): void {
        server.tool(
            "my-tool",
            "Description of my tool",
            {
                param1: z.string().describe("Parameter description"),
            },
            async ({ param1 }) => {
                this.logger.info(`MyTool called with param1: ${param1}`);
                
                return {
                    content: [
                        {
                            type: "text",
                            text: `Result: ${param1}`,
                        },
                    ],
                };
            },
        );

        this.logger.info("MyTool registered");
    }
}
新しいリソースの追加
// resources/custom/my-resource.ts
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { IResource } from "../core/domain/interfaces/resource.interface.js";
import { ILogger } from "../core/domain/interfaces/logger.interface.js";

export class MyResource implements IResource {
    private readonly logger: ILogger;

    constructor(logger: ILogger) {
        this.logger = logger;
    }

    public register(server: McpServer): void {
        server.resource('my-resource', 'my-data.json', async () => {
            this.logger.info('My resource accessed');

            return {
                contents: [
                    {
                        uri: 'my-data.json',
                        text: JSON.stringify({ key: "value" }, null, 2),
                        mimeType: 'application/json',
                    },
                ],
            };
        });

        this.logger.info('My resource registered');
    }
}
新しいプロンプトの追加
// prompts/custom/my-prompt.ts
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { IPrompt } from "../core/domain/interfaces/prompt.interface.js";
import { ILogger } from "../core/domain/interfaces/logger.interface.js";

export class MyPrompt implements IPrompt {
    private readonly logger: ILogger;

    constructor(logger: ILogger) {
        this.logger = logger;
    }

    public register(server: McpServer): void {
        server.prompt(
            'my-prompt',
            'Description of my prompt',
            () => {
                this.logger.info('My prompt accessed');

                return {
                    messages: [
                        {
                            role: 'user',
                            content: {
                                type: 'text',
                                text: 'Initial user message',
                            },
                        },
                        {
                            role: 'assistant',
                            content: {
                                type: 'text',
                                text: 'Initial assistant response',
                            },
                        },
                    ],
                };
            },
        );

        this.logger.info('My prompt registered');
    }
}

📝 適用されている SOLID 原則

原則実装
単一責任各クラスが明確な責任を 1 つ持ちます
オープン/クローズド既存のコードを変更せずにシステムを拡張できます
リスコフの置換派生型は基底型と置き換え可能です
インターフェース分離クライアントごとに特化したインターフェースを用意します
依存性逆転上位モジュールは抽象に依存します

📄 ライセンス

このプロジェクトは MIT License の下でライセンスされています。詳細は LICENSE ファイルを参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。