Home
Login

MCPサーバーを構築するためのTypeScriptフレームワーク

MITTypeScript 1.9kpunkpeye Last Updated: 2025-06-21

FastMCP - TypeScript MCPサーバーフレームワーク

プロジェクト概要

FastMCPは、Model Context Protocol (MCP) サーバーを構築するために設計されたTypeScriptフレームワークです。クライアントセッションを処理できる高性能なMCPサーバーを迅速に作成するための完全なツールと機能を提供します。

プロジェクトアドレス: https://github.com/punkpeye/fastmcp

主要な特徴

基本機能

  • シンプルなツール、リソース、プロンプト定義: サーバー機能を定義するための直感的なAPIを提供
  • 認証サポート: 安全なアクセスを確保するための組み込み認証メカニズム
  • セッション管理: クライアントセッションの処理と状態管理をサポート
  • マルチメディアコンテンツサポート: 画像および音声コンテンツの返却をサポート
  • ログ記録: デバッグと監視のための完全なログシステム
  • エラー処理: 統一されたエラー処理メカニズム
  • Server-Sent Events (SSE): リアルタイムデータプッシュをサポート
  • CORSサポート: デフォルトでクロスオリジンリソース共有を有効化

高度な特徴

  • 進捗通知: ツール実行中のリアルタイムな進捗フィードバック
  • 型付きサーバーイベント: TypeScript型安全なイベントシステム
  • プロンプトパラメータの自動補完: スマートなパラメータ補完機能
  • サンプリングリクエスト: AIモデルのサンプリングリクエストをサポート
  • 自動化されたSSEハートビート: 接続の安定性を維持
  • ルートディレクトリ管理: ファイルシステムのルートディレクトリ設定
  • CLIツール: テストとデバッグのためのコマンドラインツールを提供

インストールと使用方法

インストール

npm install fastmcp

基本的な例

import { FastMCP } from "fastmcp";
import { z } from "zod"; 

const server = new FastMCP({
  name: "My Server",
  version: "1.0.0",
});

server.addTool({
  name: "add",
  description: "Add two numbers",
  parameters: z.object({
    a: z.number(),
    b: z.number(),
  }),
  execute: async (args) => {
    return String(args.a + args.b);
  },
});

server.start({
  transportType: "stdio",
});

主要な機能モジュール

1. ツール定義 (Tools)

ツールを使用すると、サーバーはクライアントが実行可能な関数を公開できます。これらの関数はクライアントから呼び出すことができ、LLMが操作を実行するために使用できます。

サポートされているスキーマ検証ライブラリ

  • Zod: 最も人気のあるTypeScriptスキーマ検証ライブラリ
  • ArkType: 最新の型検証ライブラリ
  • Valibot: 軽量なスキーマ検証ライブラリ

Zodの例

import { z } from "zod";

server.addTool({
  name: "fetch-zod",
  description: "Fetch the content of a url (using Zod)",
  parameters: z.object({
    url: z.string(),
  }),
  execute: async (args) => {
    return await fetchWebpageContent(args.url);
  },
});

ツールアノテーション

ツールにはアノテーションを含めることができ、より豊富なコンテキストと制御情報を提供します。

server.addTool({
  name: "fetch-content",
  description: "Fetch content from a URL",
  parameters: z.object({
    url: z.string(),
  }),
  annotations: {
    title: "Web Content Fetcher", 
    readOnlyHint: true, 
    openWorldHint: true,
  },
  execute: async (args) => {
    return await fetchWebpageContent(args.url);
  },
});

2. リソース管理 (Resources)

リソースは、MCPサーバーがクライアントに提供したいあらゆる種類のデータを表します。以下を含みます。

  • ファイルの内容
  • スクリーンショットと画像
  • ログファイル
  • その他のデータ
server.addResource({
  uri: "file:///logs/app.log",
  name: "Application Logs",
  mimeType: "text/plain",
  async load() {
    return {
      text: await readLogFile(),
    };
  },
});

リソーステンプレート

server.addResourceTemplate({
  uriTemplate: "file:///logs/{name}.log",
  name: "Application Logs",
  mimeType: "text/plain",
  arguments: [
    {
      name: "name",
      description: "Name of the log",
      required: true,
    },
  ],
  async load({ name }) {
    return {
      text: `Example log content for ${name}`,
    };
  },
});

3. プロンプト管理 (Prompts)

プロンプトを使用すると、サーバーは再利用可能なプロンプトテンプレートとワークフローを定義できます。

server.addPrompt({
  name: "git-commit",
  description: "Generate a Git commit message",
  arguments: [
    {
      name: "changes",
      description: "Git diff or description of changes",
      required: true,
    },
  ],
  load: async (args) => {
    return `Generate a concise but descriptive commit message for these changes:\n\n${args.changes}`;
  },
});

4. 認証

FastMCPはカスタム認証機能をサポートしています。

import { AuthError } from "fastmcp";

const server = new FastMCP({
  name: "My Server",
  version: "1.0.0",
  authenticate: ({ request }) => {
    const apiKey = request.headers["x-api-key"];
    if (apiKey !== "123") {
      throw new Response(null, {
        status: 401,
        statusText: "Unauthorized",
      });
    }
    return {
      id: 1,
    };
  },
});

5. Server-Sent Events (SSE)

リアルタイム通信をサポートするSSE機能。

server.start({
  transportType: "sse",
  sse: {
    endpoint: "/sse",
    port: 8080,
  },
});

6. セッション管理

FastMCPは、各クライアント接続に新しいサーバーインスタンスを割り当て、1:1通信を実現します。

server.on("connect", (event) => {
  console.log("Client connected:", event.session);
});

server.on("disconnect", (event) => {
  console.log("Client disconnected:", event.session);
});

開発ツール

テストとデバッグ


npx fastmcp dev src/examples/addition.ts


npx fastmcp inspect src/examples/addition.ts

Claude Desktop統合

Claude Desktopに設定を追加します。

{
  "mcpServers": {
    "my-mcp-server": {
      "command": "npx",
      "args": ["tsx", "/PATH/TO/YOUR_PROJECT/src/index.ts"],
      "env": {
        "YOUR_ENV_VAR": "value"
      }
    }
  }
}

実際のアプリケーション事例

FastMCPは、以下の複数のプロジェクトで採用されています。

  • apinetwork/piapi-mcp-server: Midjourney/Flux/Klingなどを使用してメディアコンテンツを生成
  • domdomegg/computer-use-mcp: コンピューター制御ツール
  • Meeting-Baas/meeting-mcp: 会議ロボットとトランスクリプト管理
  • drumnation/unsplash-smart-mcp-server: Unsplash画像検索統合
  • aiamblichus/mcp-chat-adapter: LLMチャット完了インターフェース

技術的な利点

  1. 型安全: 完全なTypeScriptサポートにより、コード品質を確保
  2. 柔軟なスキーマ: さまざまな検証ライブラリをサポートし、さまざまなニーズに対応
  3. 最新のアーキテクチャ: 最新のWeb標準とベストプラクティスに基づく
  4. 豊富な機能: 基本機能から高度な機能までを包括的にサポート
  5. 拡張性: モジュール設計により、機能拡張が容易
  6. 開発者フレンドリー: 充実したCLIツールとデバッグサポート

まとめ

FastMCPは、強力で使いやすいTypeScriptフレームワークであり、MCPサーバーを構築するための完全なソリューションを提供します。単純なツール統合から複雑なAIサービス構築まで、FastMCPは必要な機能と柔軟性を提供できます。豊富な機能セットと優れた開発者エクスペリエンスにより、MCPエコシステムにおける重要なツールとなっています。