Building a CSS Tutor MCP Server について
Node.js と TypeScript で構築された MCP サーバーのデモで、CSS チューターとして接続先のAIアシスタントに CSS 機能の最新情報を個別に提供します。MCP サーバーの開発を学ぶ開発者を想定しています。
主な機能
- 01リソース、ツール、プロンプトの実装例
- 02既知の CSS 概念を保存する JSON ファイル
- 03OpenRouter 経由で取得する最新の CSS 情報
- 04Claude Desktop と Cursor の設定手順
活用シーン
- 01基本的な MCP サーバーの構築方法の学習
- 02ユーザーが習得済みの CSS 概念の管理
- 03Cursor のプロジェクトルールとしてのガイダンスプロンプトの読み込み
MCP 対応
リソースで既知の CSS 概念を保持し、ツールでその記憶の読み書きと更新情報の取得を行い、プロンプトでクライアントの操作手順を案内します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
CSS チューター MCP サーバーの構築
このリポジトリには、Node.js と TypeScript で構築されたシンプルな Model Context Protocol(MCP)サーバーが含まれています。「CSS チューター」として動作し、接続された AI クライアントに CSS 機能に関する最新情報をパーソナライズして提供します。
このサーバーでは、リソース、ツール、プロンプトの定義という主要な MCP の概念を紹介します。このデモの目的は、ここからさらに発展させ、より大規模で興味深いエージェント機能を構築できるようにすることです。
前提条件
- Node.js(v18 以降を推奨)
npm(またはyarn、pnpmなど、お好みの Node.js パッケージマネージャー)- MCP サーバーに接続できる AI クライアント(例:Claude デスクトップアプリ)
- OpenRouter API Key(Perplexity 経由で最新の CSS 情報を取得するため)
クイックスタート
次の手順で、サーバーをすばやく起動できます。
-
リポジトリをクローンします:
git clone https://github.com/3mdistal/css-mcp-server.git cd css-mcp-server -
依存関係をインストールします:
npm install # または: yarn install / pnpm install -
API キーを準備します:
get_latest_updatesツールには OpenRouter API キーが必要です。OpenRouter からキーを取得してください。このキーは手順 5 で MCP クライアントに渡します。 -
サーバーをビルドします: TypeScript コードをコンパイルします。
npm run build # または: yarn build / pnpm run build -
MCP クライアントを設定します: サーバーの起動方法をクライアントに伝え、環境変数として API キーも渡します。Claude デスクトップアプリの
claude_desktop_config.jsonを使う場合の例を示します。{ "mcpServers": { "css-tutor": { "command": "node", "args": [ "/full/path/to/your/css-mcp-server/build/index.js" ], "env": { "OPENROUTER_API_KEY": "sk-or-xxxxxxxxxxxxxxxxxxxxxxxxxx" } } } }(
args内のパスが、お使いのシステム上にあるビルド済みindex.jsファイルの正しい絶対パスであることを確認してください。プレースホルダーの API キーを置き換えてください。) -
接続します: MCP クライアントから接続を開始します。クライアントが環境変数に API キーを設定した状態でサーバープロセスを起動し、操作を開始できます!
Cursor での使用
Cursor は AI を中心に設計されたコードエディターで、MCP クライアントとして動作できます。このサーバーを Cursor でセットアップするのは簡単ですが、ガイダンスプロンプトには追加の手順が必要です。
-
Cursor でサーバーを設定する:
Cursor Settings>MCP>Add new global MCP serverの順に移動します。- Claude Desktop の手順で使用したものと同じ JSON を、同じ注意事項に従って貼り付けます。
-
プロンプト用の Cursor プロジェクトルールを作成する: 現在、Cursor はサーバーが提供する MCP プロンプトを自動的に使用しません。代わりに、Cursor の Project Rules 機能を使ってガイダンスを提供する必要があります。
-
プロジェクトのルートに
.cursor/rulesディレクトリがない場合は作成します。 -
その中に
css-tutor.ruleという名前のファイルを作成します(または任意の.ruleファイル名を使用します)。 -
次のガイダンステキストを
css-tutor.ruleに貼り付けます。You are a helpful assistant connecting to a CSS knowledge server. Your goal is to provide the user with personalized updates about new CSS features they haven't learned yet. Available Tools: 1. `get_latest_updates`: Fetches recent general news and articles about CSS. Use this first to see what's new. 2. `read_from_memory`: Checks which CSS concepts the user already knows based on their stored knowledge profile. 3. `write_to_memory`: Updates the user's knowledge profile. Use this when the user confirms they have learned or already know a specific CSS concept mentioned in an update. Workflow: 1. Call `get_latest_updates` to discover recent CSS developments. 2. Call `read_from_memory` to get the user's current known concepts (if any). 3. Compare the updates with the known concepts (if any). Identify 1-2 *new* concepts relevant to the user. **Important: They _must_ be from the response returned by `get_latest_updates` tool.** 4. Present these new concepts to the user, adding any context as needed, in addition to the information returned by the `get_latest_updates`. 5. Ask the user if they are familiar with these concepts or if they've learned them now. 6. If the user confirms knowledge of a concept, call `write_to_memory` to update their profile for that specific concept. 7. Focus on providing actionable, personalized learning updates.
-
-
接続して使用する:
- Cursor の MCP 設定で
css-tutorサーバーが有効になっていることを確認します。 - 新しいチャットまたはコード生成リクエスト(例:Cmd+K)を開始し、リクエストに
@css-tutor-rule(またはルールファイルに付けた名前)を含めます。これにより Cursor はルールの内容を読み込み、接続された MCP サーバーが提供するread_from_memory、write_to_memory、get_latest_updatesツールの使い方に関する指示を適用します。
- Cursor の MCP 設定で
プロンプト/ルールがなくても、依頼すれば Cursor は個々のツールを使用できます。プロンプトは、ツールを呼び出してメモリを読み書きするためのワークフローと順序を提供します。
コードを理解する
このセクションでは、サーバーの実装について概要を説明します。
使用されている MCP の概念
- リソース(
css_knowledge_memory): ユーザーが把握している CSS の概念を表し、data/memory.jsonに永続的に保存されます。 - ツール: サーバーが実行できる操作です。
get_latest_updates:OpenRouter/Perplexity から CSS のニュースを取得します。read_from_memory:css_knowledge_memoryリソースの内容を読み取ります。write_to_memory:css_knowledge_memoryリソースを変更します。
- プロンプト(
css-tutor-guidance): ツールやリソースを効果的に利用する方法を AI クライアントに案内する静的な指示です。
コード構成
コードは次のように構成されています。
data/memory.json:既知の CSS の概念を保存するデータベースとして機能するシンプルな JSON ファイルです。デフォルト版がリポジトリに含まれています。src/resources/index.ts:css_knowledge_memoryリソースを定義します。次のものが含まれています。- データを検証するための Zod スキーマ。
- ファイルの入出力を行う
readMemory関数とwriteMemory関数。 memory://URI スキームと読み取り/書き込み権限を指定するserver.resourceによる登録。読み取りハンドラーはdata/memory.jsonの内容を返します。
src/tools/index.ts:server.toolを使用して、次の 3 つのツールを定義します。read_from_memory:readMemoryを呼び出します。write_to_memory:conceptとknownを入力として受け取り(スキーマは Zod で定義)、readMemoryとwriteMemoryを使って JSON ファイルを更新します。get_latest_updates:OPENROUTER_API_KEYが必要です。node-fetchとperplexity/sonar-proモデルを使用して OpenRouter API を呼び出し、AI が生成した要約を返します。
src/prompts/index.ts:server.promptを使用して、静的なcss-tutor-guidanceプロンプトを定義します。プロンプトのテキストはコードに直接埋め込まれています。src/index.ts:メインサーバーのエントリポイントです。@modelcontextprotocol/sdkからMcpServerインスタンスを初期化します。- 他のモジュールから
registerPrompts、registerResources、registerTools関数をインポートして呼び出します。 StdioServerTransportを使って標準入出力経由の通信を処理します。- サーバーをトランスポートに接続し、基本的なエラー処理を行います。
package.json:依存関係(@modelcontextprotocol/sdk、dotenv、node-fetch、zod)とbuildスクリプト(tsc)を定義します。.env.example/.env:OPENROUTER_API_KEYの保存に使用します(設定にオプション A を使用する場合)。.gitignore:node_modules、build、.envと、デフォルトのdata/memory.jsonを除くdata/の内容を無視するよう設定されています。tsconfig.json:標準的な TypeScript 設定です。
MCP Inspector を使ったデバッグ
サーバーをデバッグしたり、やり取りされる生の JSON-RPC メッセージを確認したりする必要がある場合は、@modelcontextprotocol/inspector ツールを使用できます。このツールは基本的な MCP クライアントとして機能し、サーバーを起動して通信の流れを表示します。
プロジェクトのルートディレクトリでターミナルから Inspector を実行します。
npx @modelcontextprotocol/inspector node ./build/index.js
説明:
npx @modelcontextprotocol/inspector:必要に応じて Inspector パッケージをダウンロードし、実行します。node:サーバーの実行に使用するコマンドです。./build/index.js:コンパイル済みサーバーのエントリポイントへのパス(プロジェクトのルートディレクトリからの相対パス)です。
Inspector の環境変数:
Inspector はサーバーを子プロセスとして起動します。サーバーが環境変数(get_latest_updates ツール用の OPENROUTER_API_KEY など)に依存している場合は、npx コマンドを実行する環境でその変数を利用できるようにしてください。この状況では .env ファイルが自動的に読み込まれない場合があります。通常は、コマンドの前に次のように指定できます。
# Example on Linux/macOS
OPENROUTER_API_KEY="sk-or-xxxxxxxxxx" npx @modelcontextprotocol/inspector node ./build/index.js
# Example on Windows (Command Prompt)
set OPENROUTER_API_KEY=sk-or-xxxxxxxxxx && npx @modelcontextprotocol/inspector node ./build/index.js
# Example on Windows (PowerShell)
$env:OPENROUTER_API_KEY="sk-or-xxxxxxxxxx"; npx @modelcontextprotocol/inspector node ./build/index.js
sk-or-xxxxxxxxxx を実際のキーに置き換えてください。
まとめ
このデモでは、TypeScript SDK を使用して機能する MCP サーバーを作成する際の基本的な手順を紹介しました。状態を管理するリソース、アクションを実行するツール(外部 API との連携を含む)、AI クライアントを導くプロンプトを定義しました。
このデモが、これよりもはるかに複雑で便利なサーバーの構築方法を理解する助けになれば幸いです。
(また、🐛バグを見つけた場合は、気軽に issue を作成してください。)
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。