Skip to main content
Glama
yone-k

MCP Base Server

by yone-k
CLAUDE.md4.24 kB
# tools ディレクトリ ## 概要 MCPツールの実装を管理するディレクトリです。各ツールのカテゴリ別実装、ツールレジストリ、共通インターフェースを担当します。 ## 設計方針 ### モジュラー設計 各ツールは独立したモジュールとして実装し、他のツールに依存しない設計を採用します。 ### 統一されたインターフェース すべてのツールは共通のパターンに従い、入力スキーマ、出力スキーマ、ツール定義を含む構造で実装します。 ## 実装ルール ### 1. ツールファイルの構造 ```typescript import { z } from 'zod'; import { ToolDefinition } from '../../types/mcp.js'; // 入力スキーマ定義 export const MyToolInputSchema = z.object({ parameter: z.string().describe('パラメータの説明'), optionalParam: z.boolean().optional().default(false) }).strict(); export type MyToolInput = z.infer<typeof MyToolInputSchema>; // MCPツール定義 export const toolDefinition: ToolDefinition = { name: 'my_tool', description: 'ツールの機能説明', inputSchema: { type: 'object' as const, properties: { parameter: { type: 'string', description: 'パラメータの説明' } }, required: ['parameter'], additionalProperties: false } }; // 出力スキーマ定義 export const MyToolOutputSchema = z.object({ result: z.string(), timestamp: z.string().optional() }); export type MyToolOutput = z.infer<typeof MyToolOutputSchema>; // ツール実装 export async function myTool(input: MyToolInput): Promise<MyToolOutput> { return { result: `処理結果: ${input.parameter}`, timestamp: new Date().toISOString() }; } ``` ### 2. レジストリへの登録パターン ```typescript // registry.ts import { toolDefinition as myTool } from './category/my-tool.js'; export const registeredTools: ToolDefinition[] = [ myTool ]; ``` 詳細な実装例については以下を参照: - [ツール実装例](./docs/examples/tool-implementation.md) - [カテゴリ設計パターン](./docs/patterns/category-design.md) ## アンチパターン ### ❌ 避けるべきパターン ```typescript // バリデーションなしの実装 export async function badTool(input: any) { return input.someProperty; // 型安全性なし } // 統一されていないエラー処理 export async function inconsistentTool(input: any) { throw new Error('Generic error'); // McpErrorを使用すべき } ``` ### ✅ 推奨パターン ```typescript // 型安全な実装 export async function goodTool(input: MyToolInput): Promise<MyToolOutput> { // 適切な型チェックとエラーハンドリング if (!input.parameter) { throw new Error('Required parameter missing'); } return { result: input.parameter }; } ``` ## カテゴリ分類ガイドライン ### 基本的なカテゴリ - `example/` - サンプル実装とテンプレート - `utilities/` - 汎用的なユーティリティツール - `api/` - 外部API連携ツール - `file/` - ファイル操作ツール - `data/` - データ処理ツール ### カテゴリ追加の基準 1. **機能的な関連性**: 似た機能をグループ化 2. **依存関係の整理**: 共通の依存関係を持つツールをまとめる 3. **保守性の向上**: 管理しやすい粒度でカテゴリを分割 ## パフォーマンス考慮事項 1. **遅延読み込み**: 大きなツールは必要時にのみ読み込み 2. **キャッシュ戦略**: 重い処理結果の適切なキャッシュ ## セキュリティ考慮事項 1. **入力検証**: すべてのツール入力はZodスキーマで厳密に検証 2. **機密情報の取り扱い**: 環境変数やAPIキーの適切な管理 ## 新規ツール追加時のチェックリスト - [ ] 適切なカテゴリディレクトリに配置 - [ ] 入力スキーマ(Zod)を定義 - [ ] 出力スキーマ(Zod)を定義 - [ ] MCPツール定義を実装 - [ ] ツール実装関数を作成 - [ ] registry.tsに登録 - [ ] core/tool-handler.tsのswitchケースに追加 - [ ] テストを作成 - [ ] ドキュメントを更新

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yone-k/mcp-base'

If you have feedback or need assistance with the MCP directory API, please join our Discord server