金曜日, 8月 22, 2025
金曜日, 8月 22, 2025
- Advertisment -
ホームニューステックニュースany-script-mcp で任意のコマンドを MCP Tool にする

any-script-mcp で任意のコマンドを MCP Tool にする


LayerX でスタッフソフトウェアエンジニアをしている @izumin5210 です。バクラク事業部の Platform Engineering 部 Enabling チームでいろいろしています。
新しいおもちゃを作ったので自慢させてください。

3行まとめ

  • 任意のシェルスクリプトを MCP tool にできる any-script-mcp という MCP server を作ったよ
  • 例えば「o3-search-mcp の gpt-5 を使うバージョン」などを、 YAML にちょっとしたコードを書くだけで作れるよ
  • ほかにもおもしろい活用方法見つけたら教えてね

Claude Code を使った日々のソフトウェア開発で、o3-search-mcp をめちゃめちゃ活用しています。
Claude Code がわからないことがあれば自律的に o3 model に調査を委譲し、Web に潜って解決策を見つけてくれるのは本当に便利です。

https://zenn.dev/yoshiko/articles/claude-code-with-o3

そんな中、OpenAI から GPT-5 がリリースされました。当然「o3-search を GPT-5 でも試してみたい」と思うわけです。

最も単純には、Model やパラメタが違う tool が欲しくなるたびに追加で実装することになるでしょう。 o3-search-mcp のような MCP サーバーは、コード中に特定のモデル(この場合 o3)や system prompt を埋め込むかたちで実装されることが多いです。
この実装自体は OpenAI の SDKVercel AI SDK を利用できるため比較的シンプルになります。
しかし、これをモデルが出るたびに誰かが実装して npm publish していくのはまあまあ大変です。 また、そうして生まれていくたくさんの MCP server が全て継続メンテされていくとは限りません。

別の実現方法として、ちょっと汎用的に作った MCP tool のパラメタに model や system prompt を引数で渡すパターンもあります。
しかし、AI エージェントに「どのモデルを使うか」を判断させるのも、AI に本質的でないことを考えさせている、コンテキストのノイズになる可能性もあります。
例えば OpenAI Codex CLI は MCP server として動かすこともできますが、その input は複雑であり、AI が適切な値を設定する難易度は高いです。

Codex MCP の  ツールの詳細情報
Codex MCP の codex ツールの詳細情報。 これを AI Agent に埋めてもらうのは難しい。 Web 検索してほしいのに sandbox を指定してネットワークアクセスできなくなったりする。

アイディア: GitHub Actions のように、任意のスクリプトとその引数を yaml 記述させる

ここで GitHub Actions を思い出してみましょう。GitHub Actions では、ワークフローの中で任意のシェルスクリプトを記述できます:

steps:
  - name: Run custom script
    run: |
      echo "Hello, World!"
      npm test

また、GitHub Actions の custom action では引数を取ることもでき、これは yaml で引数のスキーマを定義できます。

name: 'hello'
description: 'Say hello with a custom message'
inputs:
  message:
    description: 'The greeting message'
    required: true
runs:
  using: "composite"
  steps:
    - name: Echo message
      run: echo "Hello! Your message: ${{ inputs.message }}"
      shell: bash

これを MCP tool の定義でも活用できないかというのを思いついたので、実際に作ってみました。

any-script-mcp は、任意のシェルスクリプトや CLI コマンドを MCP tool として公開できる MCP サーバーです。GitHub Actions の custom action のように、YAML ファイルで tool を定義できます。

https://github.com/izumin5210/any-script-mcp

基本的な考え方はシンプルです:

  1. YAML で tool の名前、説明、入力パラメータを定義
  2. 実行したいスクリプトを run フィールドに記述
  3. 入力は環境変数として自動的にスクリプトに渡される

Installation

any-script-mcp はよくある MCP と同じく、以下のようなコマンドで Claude Code に登録できます。

$ claude mcp add any-script \
  -s user \
  -- npx any-script-mcp

あるいはお使いのツールに合わせて mcp.json 的なファイルに記述してください。

{
  "mcpServers": {
     "any-script": {
       "command": "npx",
       "args": ["any-script-mcp"]
     }
  }
}

Tool の定義

デフォルトでは $XDG_CONFIG_HOME/any-script-mcp/config.yaml に設定ファイルを配置します。最小限の設定例は以下のようになります:

tools:
  - name: hello
    description: Say hello with a custom message
    inputs:
      message:
        type: string
        description: The greeting message
        required: true
    run: |
      echo "Hello! Your message: $INPUTS__MESSAGE"

この設定により、AI エージェントは hello という tool を呼び出せるようになります。message パラメータは環境変数 $INPUTS__MESSAGE として渡されます。

Claude Code の  で登録した MCP tool の詳細を確認している様子
Claude Code の /mcp で登録した MCP tool の詳細を確認している様子

実践例: GPT-5 検索ツールの実装

冒頭で触れた課題「GPT-5 版の検索ツールが欲しい」を、any-script-mcp で解決してみましょう。

tools:
  
  - name: gpt5-search
    description: |
      AI agent with web search for researching latest information,
      troubleshooting program errors, discussing complex problems
      and design decisions, exploring advanced library usage,
      and investigating upgrade paths.
      Supports natural language queries.
    inputs:
      prompt:
        type: string
        description: What you want to search, analyze, or discuss with the AI agent
        required: true
    run: |
      codex exec \
        --model gpt-5 \
        --sandbox workspace-write \
        --config "sandbox_workspace_write.network_access=true" \
        "$INPUTS__PROMPT" \
        --json \
        | jq -sr 'map(select(.msg.type == "agent_message") | .msg.message) | last'

(description は o3-search-mcp を参考にさせてもらってます! 重ね重ねありがとうございます!)

この設定により、Claude Code から gpt5-search tool が使えるようになります。o3-search-mcp と同様に、Web 検索が必要なタスクを GPT-5 に委譲できます。

Claude Code が gpt5-search tool に挨拶している様子
Claude Code が gpt5-search tool に挨拶している様子

(余談: 今回の例は system prompt を与えてない簡易なものになってます。 目的に合わせてちゃんと設定するほうがいいでしょう。)

このように、MCP サーバーを新たに実装することなく、柔軟に MCP Tool を追加できるようになります。
Tool 定義自体が柔軟になることで Tool の input も最小の表現に絞り込めるため、AI からしても使いやすい Tool を定義することができます。

柔軟な Tool 追加の用例

any-script-mcp は小さい設定ファイルでいろんなツールを柔軟に追加できます。先程の o3-search-mcp の model 違いは一例ですが、ほかにも system prompt を変えて別の用途に
特化させたツールを作ることもできるかもしれません。例えば、「設計相談や技術選定にかかる調査に特化させたプロンプトを与えた gpt5-architect」などです。

他の例としては、ちょっと複雑な定型処理を AI agent が呼び出せるように MCP tool にするというのもあるかもしれません。例えば以下のようなツールを定義しておくと、AI Agent が必要に応じて OSS の CHANGELOG を見つけてくれます。

tools:
  - name: get-changelog-from-github-releases
    description: Fetch and format changelog from GitHub releases
    inputs:
      owner:
        type: string
        description: Repository owner (e.g., 'vercel')
      repo:
        type: string
        description: Repository name (e.g., 'next.js')
    run: |
      gh api graphql \
        -F owner="vercel" -F name="next.js" \
        -f query='
          query($owner: String!, $name: String!) {
            repository(owner: $owner, name: $name) {
              releases(first: 50, orderBy: {field: CREATED_AT, direction: DESC}) {
                pageInfo { hasNextPage endCursor }
                nodes {
                  name
                  tagName
                  isPrerelease
                  description
                }
              }
            }
          }
        ' \
        --jq '
          .data.repository.releases.nodes[]
            | select(.isPrerelease | not) |
              "##" + .name + "\n\n" + .description + "\n"
        '

Claude Code が get-changelog-from-github-releases を利用する様子
any-script-mcp で実装した get-changelog-from-github-releases を Claude Code が利用する様子

まとめ

any-script-mcp を利用することで、新たな MCP サーバーの導入あるいは開発なしに独自の MCP tool を追加できるようになります。

複雑なものは独自でサーバを実装したほうがいい場合ももちろんあるでしょう。一方で、別の AI ツールをモデル違い・プロンプト違いで呼び出したいときや、CHANGELOG 取得のような定型化しやすい複雑な処理を Agent に自律的に利用してほしいケースなどでは便利に活用できるのではないでしょうか。

このツール自体は思いつきから Vibe coding で作ったばかりなので、まだ思いついてない便利な用途があるかもしれません。 ぜひいろいろ試していただき、便利な使い方が見つかったら教えてもらえると嬉しいです!



Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -