Agent Skills by ALSEL
汎用LLM・AI開発⭐ リポ 0品質スコア 65/100

zod-defined-tool-factory

MCPツール定義をTyped型の`defineTool`ヘルパーでラップして、Zodスキーマがランタイム検証とハンドラーのTypeScriptパラメータ型の両方を駆動し、あらかじめ解決されたページコンテキストが必要なツール用に別の`definePageTool`バリアントを用意します。

description の原文を見る

Wrap MCP tool definitions in a typed `defineTool` helper so zod schemas drive both runtime validation and the handler's TypeScript param types, with a separate `definePageTool` variant for tools that need a pre-resolved page context.

SKILL.md 本文

型付きツール定義ファクトリー

使用時期

  • MCPまたは同様のJSONスキーマ駆動型ツールシステムを持つ多数のツールがあり、宣言スキーマとハンドラーのパラム型の間に差異がないようにしたい場合
  • 一部のツールに追加セットアップ(例えば事前解決された「現在のページ」またはDBコネクション)が必要であり、毎回ハンドラーにコピー&ペーストしたくない場合
  • ビルド時に同じツール定義からドキュメントやCLIを生成したい場合

動作原理

  • BaseToolDefinition<Schema extends zod.ZodRawShape>namedescriptionannotationsschemaで定義します。TypeScriptがzodからパラム型を推論できるようSchemaをジェネリックとして保持します。
  • defineTool(def)を提供します。これは単に引数を返しますがジェネリックを絞ります。ハンドラーシグネチャは(request: { params: zod.objectOutputType<Schema, ZodTypeAny> }, response, context) => Promise<void>として型付けされます。
  • 2番目のオーバーロードdefineTool(factoryFn)を提供します。これはパース済みCLI引数の関数を受け入れ、ツールを返します。これにより、ツールは起動フラグに基づいてスキーマ/動作を調整できます。
  • 「ページが必要」のケースでは、definePageToolを追加します。これはpageScoped: trueをスタンプし、拡張されたハンドラーシグネチャ(request & { page: ContextPage }, response, context)を持ちます。サーバーディスパッチャーはpageScopedをチェックし、ハンドラー呼び出し前にページを解決します。
  • 共通スキーマフラグメント(pageIdSchematimeoutSchemaviewportTransformのような変換)をエクスポートします。これにより、ツール間で正確な文言と検証が共有されます。

export const takeSnapshot = definePageTool({
  name: 'take_snapshot',
  description: 'Take a text a11y snapshot of the selected page.',
  annotations: { category: ToolCategory.DEBUGGING, readOnlyHint: false },
  schema: {
    verbose: zod.boolean().optional().describe('Include all a11y attrs.'),
    filePath: zod.string().optional().describe('Save to file instead.'),
  },
  // `request.params.verbose` は `boolean | undefined` として型付けされます。
  // `definePageTool` により `request.page` が存在します。
  handler: async (request, response) => {
    response.includeSnapshot({
      verbose: request.params.verbose ?? false,
      filePath: request.params.filePath,
    });
  },
});

注意点

  • zod.ZodRawShapeはコンパイルされたオブジェクトスキーマではなく、生のプロパティマップです。スキーマをzod.object(...)でラップするとオーバーロード一致が失われるため、ラップしないでください。
  • ランタイムスキーマウォーカー(ドキュメントやテレメトリー向け)は、ZodOptionalZodDefaultZodEffects_def.innerType / _def.schemaを再帰的にアンラップして処理する必要があります。そうしないと型を誤読みします。
  • ファクトリー変種ツール(args) => defは登録時にtypeof tool === 'function'で検出される必要があります。1つの配列内で遅延ツールと即座ツールを混在させると「tool.name is undefined」のバグが発生します。
  • ハンドラーシグネチャはPromise<void>に保ちます。レスポンスビルダーへの副作用がコントラクトです。値を返すことはビルダー抽象化がリークしていることを示す兆候です。

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
kjuhwa
リポジトリ
kjuhwa/skills-hub
ライセンス
MIT
最終更新
2026/4/26

Source: https://github.com/kjuhwa/skills-hub / ライセンス: MIT

関連スキル

OpenAILLM・AI開発⭐ リポ 6,054

agent-browser

AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。

by JimmyLv
汎用LLM・AI開発⭐ リポ 1,982

anyskill

AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 1,982

engram

AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 21,584

skyvern

AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。

by Skyvern-AI
汎用LLM・AI開発⭐ リポ 1,149

pinchbench

PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。

by pinchbench
汎用LLM・AI開発⭐ リポ 4,693

openui

OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。

by thesysdev
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: kjuhwa · kjuhwa/skills-hub · ライセンス: MIT