MCP サーバービルダー
mcp-use を使用して、ツール、リソース、プロンプト、インタラクティブウィジェットを備えた本番対応の MCP サーバーを構築します。
コーディング前に行うこと
ユーザーのリクエストをツール、ウィジェット、リソースに分解します。何に UI が必要で、何がテキストで十分かを判断します。
design-and-architecture.md を読んでください:構築計画を立てる際、ツールとウィジェットのどちらを選ぶか判断する際、または UX フローを設計する際に参照します。
実装
- ツール、リソース、プロンプト → tools-and-resources.md: サーバー側の
server.tool()、server.resource()、server.prompt()コードを記述する際に参照 - ビジュアルウィジェット (React TSX) → widgets.md:
resources/フォルダ内でインタラクティブな UI ウィジェットを作成する際に参照 - レスポンスヘルパー API → response-helpers.md: ツールやリソースの戻り値の形式を選択する際に参照
- URI テンプレートパターン → resource-templates.md: パラメータ化されたリソースを定義する際に参照
クイックリファレンス
import {
MCPServer,
text,
object,
markdown,
html,
image,
widget,
error,
} from "mcp-use/server";
import { z } from "zod";
const server = new MCPServer({ name: "my-server", version: "1.0.0" });
// ツール
server.tool(
{
name: "my-tool",
description: "...",
schema: z.object({ param: z.string().describe("...") }),
},
async ({ param }) => text("result"),
);
// リソース
server.resource(
{ uri: "config://settings", name: "Settings", mimeType: "application/json" },
async () => object({ key: "value" }),
);
// プロンプト
server.prompt(
{
name: "my-prompt",
description: "...",
schema: z.object({ topic: z.string() }),
},
async ({ topic }) => text(`Write about ${topic}`),
);
server.listen();
レスポンスヘルパー: text()、object()、markdown()、html()、image()、audio()、binary()、error()、mix()、widget()
サーバーメソッド: server.tool()、server.resource()、server.resourceTemplate()、server.prompt()、server.listen()