develop-mcp-server-ts
TypeScriptでMCP(Model Context Protocol)サーバーを構築するための標準化されたワークフローです。公式のTypeScript SDKを使用してMCPサーバーを構築・拡張する場合、ツール、リソース、プロンプトを追加する場合、ツールのアノテーション(title、readOnlyHintなど)を設定する場合、StdioまたはStreamable HTTPトランスポートを選択する場合、およびMCP InspectorやClaude Desktopでテストする場合に使用できます。
description の原文を見る
Standardized workflow for building MCP (Model Context Protocol) servers in TypeScript. Use when building or extending an MCP server with the official TypeScript SDK (tools, resources, prompts), adding tool annotations (title, readOnlyHint, etc.), choosing Stdio vs Streamable HTTP transport, or testing with MCP Inspector or Claude Desktop.
SKILL.md 本文
MCPサーバー開発(TypeScript)
目的
公式TypeScript SDKを使用してMCPサーバーをビルドするための繰り返し可能で文書化されたワークフローを提供します。これにより、エージェントと開発者はアドホックな検出なしにツール、リソース、プロンプトを追加できます。このワークフローに従い、要件から動作確認可能なサーバー(StdioまたはStreamable HTTP)を構築します。このスキルはMCPスペック2025-11-25に準拠しており、ツール、リソース、プロンプト、およびサーバーユーティリティ(ロギング、完了、ページネーション)に対応しています。
ワークフロー チェックリスト
- ステップ1:要件の発見
-
references/mcp-specification.mdを読んでプリミティブ(ツール、リソース、プロンプト)とトランスポートについて学ぶ。 - サーバーが公開するプリミティブを決定する(例:ツールのみ、またはツール+リソース)。
- トランスポートを選択:Stdio(ローカル、プロセスベース)またはStreamable HTTP(リモート、Webベース)。
-
- ステップ2:プロジェクト初期化
- Node/pnpmプロジェクトを初期化し、
@modelcontextprotocol/sdkとzodをインストール。 - TypeScriptをESM用に設定(例:
"module": "Node16"、"target": "ES2022")。オプションでassets/boilerplate/package.jsonとassets/boilerplate/tsconfig.jsonを使用。
- Node/pnpmプロジェクトを初期化し、
- ステップ3:実装パターン
-
references/typescript-sdk-cheatsheet.mdを使用してMcpServer、トランスポート、registerTool(Zod inputSchema付き)、registerResourceについて学ぶ。 - ツールアノテーション(title、readOnlyHint、destructiveHint、idempotentHint、openWorldHint)を検討し、クライアントがツールを提示でき、ユーザーが承認できるようにする。チートシートの「ツールアノテーション」とMCP Tool annotationsを参照。
- データを削除または永続的に変更するツールの場合、destructiveHint: trueを設定。クライアントは実行前に確認プロンプトを表示すべきであり、エージェント指示では破壊的なツールを呼び出す前にユーザーに確認するよう要求すること。
- Stdioの場合:ロギングには
console.error(またはstderr)のみを使用し、console.log(stdoutはJSON-RPCを破損させる)は絶対に使用しない。 - オプションで
assets/templates/server-stdio.tsまたはassets/templates/server-http.tsからコピー。
-
- ステップ4:テスト
- MCP Inspectorでテスト:例えば
npx @modelcontextprotocol/inspectorを実行し、サーバーを起動(例:node build/index.js)。 - またはClaude Desktopでテスト:
claude_desktop_config.json(macOS:~/Library/Application Support/Claude/claude_desktop_config.json)にサーバーを追加し、commandとargsを指定して、Claude Desktopを再起動。
- MCP Inspectorでテスト:例えば
詳細な手順
1. 要件の発見
MCPスペック概要を読んで以下を理解します:
- プリミティブ:ツール(LLMから呼び出し可能)、リソース(読み取り専用コンテキスト)、プロンプト(再利用可能なテンプレート)。
- トランスポート:Stdio(ローカル、クライアント1つ/プロセス)対Streamable HTTP(リモート、多数のクライアント)。
- ライフサイクル:初期化、機能ネゴシエーション、その後ツール一覧表示/呼び出しまたはリソース読み取り。
サーバーが必要とするプリミティブを決定し、ローカルで実行(Stdio)するかホストされた環境(Streamable HTTP)で実行するかを決めます。
2. プロジェクト初期化
- パッケージを作成します(例:
pnpm initまたはnpm init -y)。 - インストール:
pnpm add @modelcontextprotocol/sdk zod(またはnpm install @modelcontextprotocol/sdk zod)。SDKはツールのinputSchemaにZodが必要です。 - ESMを使用する場合はpackage.jsonに
"type": "module"を設定。 "module": "Node16"、"moduleResolution": "Node16"、"target": "ES2022"、"outDir": "./build"(またはそれに類する設定)を含むtsconfigを使用。
3. 実装パターン
TypeScript SDKチートシートを使用して以下を行います:
McpServerを作成しトランスポート(StdioServerTransportまたはStreamableHTTPServerTransport)に接続。server.registerTool(name, { description, inputSchema }, handler)でツールを登録。inputSchemaにはZodを使用(例:{ id: z.string() })。{ content: [{ type: "text", text: "..." }] }を返します。クライアントがツールを提示または承認するのに役立つ場合は、ツールアノテーション(title、readOnlyHint、destructiveHint、idempotentHint、openWorldHint)を追加します。破壊的な操作(例:削除)の場合は、destructiveHint: trueを設定。クライアントはユーザー確認プロンプトを表示すべきであり、エージェント指示ではそのようなツールを呼び出す前にユーザーに確認するよう要求すること。- 必要に応じてリソースを登録(URIテンプレートと読み取りハンドラー)。
- ロギング:Stdioトランスポート使用時は、stdoutに書き込まず、
console.errorまたはstderrに出力するロガーを使用。
4. テスト
- MCP Inspector:
npx @modelcontextprotocol/inspectorを実行し、サーバーを起動(例えばClaude Desktopで使用するコマンド)。Inspector UIを使用してツールを一覧表示し、呼び出します。 - Claude Desktop:設定ファイルを編集(ローカルMCPサーバーに接続を参照)。
mcpServersの配下にcommandとargsを含むエントリを追加(例:nodeと["/path/to/build/index.js"])。Claude Desktopを完全に再起動(アプリを終了してから再度開く)。サーバーがコネクタに表示されることを確認。
成功の基準
- サーバーはツール(および/またはリソース/プロンプト)を正しく一覧表示および実行できる。
- Stdioの場合:
console.logの使用がなく、ログはstderrに出力される。 - ツールのinputSchemaはZodを使用し、SDK期待値と一致している。
- ツール名はスペック2025-11-25に準拠(1〜128文字、許可された文字)。エラーはツール実行結果(
isError: true)またはプロトコルエラーとして適切に使用。 - ツールアノテーション(title、readOnlyHint、destructiveHint、idempotentHint、openWorldHint)は、クライアントがツールを提示または承認するのに役立つ場合に使用される。
- 公式リンク(TypeScript SDK、MCPスペック2025-11-25)がバージョンとAPIの詳細に使用される。
参考リソース
- スペックインデックス(2025-11-25):
references/spec-2025-11-25-index.md– 2025-11-25スペックのすべてのセクションのインデックス(基本、クライアント、サーバー、サーバーユーティリティ) references/mcp-specification.md– MCPの概念とスペックリンクreferences/typescript-sdk-cheatsheet.md– SDKスニペットとロギングルール- MCP Build server (TypeScript)
- MCP TypeScript SDK
- MCP Specification 2025-11-25 · Changelog
- MCP Tools — Tool annotations (title、readOnlyHint、destructiveHint、idempotentHint、openWorldHint)
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- yu-iskw
- ライセンス
- Apache-2.0
- 最終更新
- 2026/5/1
Source: https://github.com/yu-iskw/lightdash-tools / ライセンス: Apache-2.0
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。