⏱️

AIエージェントのタスク実行時間を計測するためのMCPサーバーを作ってみた(VS Code × GitHub Copilot)

に公開

はじめに

AI エージェント導入の判断材料として、AI エージェントにタスクを実行させて完了するまでに要した時間を毎回把握したいなと思ったのですが、いい方法がわからなかったため、現在時間などを取得できるような MCP サーバーを作ってタイムトラッキングができないか試してみました。

MCP サーバーの実装について

https://github.com/t-shiratori/time-tools-mcp-server

とりあえず MCP サーバーのツールで以下のものを作成しました。

tool description
getCurrentDateTime 現在日時を取得する
getElapsedTime 開始日時と終了日時をの差分を取って経過時間を取得する
src/index.ts
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import dayjs from "dayjs";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";

const DEFAULT_TIME_FORMAT = "YYYY-MM-DD HH:mm:ss";

// Create an MCP server
const server = new McpServer({
    name: "TimeTools",
    description: "Tools to help you manage time",
    version: "1.0.0",
});

server.tool(
    "getCurrentDateTime",
    "Get the current date and time (e.g. 2025-01-01 01:01:01)",
    async () => {
        const currentDateTime = dayjs().format(DEFAULT_TIME_FORMAT);
        return {
            content: [
                {
                    type: "text",
                    text: currentDateTime,
                },
            ],
        };
    },
);

server.tool(
    "getElapsedTime",
    "Get the difference time between two datetimes (e.g. 2025-01-01 01:01:01 and 2025-01-02 02:02:02)",
    {
        from: z.string(),
        to: z.string(),
        unit: z.enum(["second", "minute", "hour"]).optional().default("second"),
    },
    async ({ from, to, unit = "second" }) => {
        const fromDateTime = dayjs(from);
        const toDateTime = dayjs(to);
        if (!fromDateTime.isValid() || !toDateTime.isValid()) {
            return {
                content: [{ type: "text", text: "Invalid format" }],
                isError: true,
            };
        }
        /**
         * {@link https://day.js.org/docs/en/display/difference}
         */
        const duration = toDateTime.diff(fromDateTime, unit, true);
        return {
            content: [{ type: "text", text: String(duration) }],
        };
    },
);

async function main() {
    const transport = new StdioServerTransport();
    await server.connect(transport);
    console.error("Example MCP Server running on stdio");
}

main().catch((error) => {
    console.error("Fatal error in main():", error);
    process.exit(1);
});

インスペクターで見るとこんな感じです。

VS Code で MCP サーバーを使えるようにする

クライアント側のディレクトリを用意しておきます。

mkdir demo-client
cd demo-client

VS Code の設定ファイルに MCP サーバーを追加します。
設定場所はワークスペースかユーザー設定があります。

今回はワークスペースに .vscode/mcp.json を作成して以下のように設定します。
args にはビルドした MCP サーバーの実行ファイルへの絶対パスを指定します。

mkdir .vscode
touch .vscode/mcp.json
.vscode/mcp.json
{
  "servers": {
    "time-tracker": {
      "command": "node",
      "args": ["/Users/中略/time-tools-mcp/build/index.js"]
    }
  }
}

「起動」ボタンを押します。

確認の為ツールボタンを押すしてみます。

エディター上部に以下のポップアップが開きます。
MCP サーバーが使えるようになっていることがわかります。

VS Code のエージェントモードについて

VS Code でエージェントモードが利用できるようになったのは version 1.99 からです。
March 2025 (version 1.99)

今回試しているバージョンは 1.99.3 (Universal) です。

いまのところ MCP の 3 つの機能(ツール、プロンプト、リソース)のうち、Copilot のエージェントモードに提供できるのはツールのみのようです。
Supported MCP capabilities

プロンプトを用意する

やりたい処理の流れとしては、以下のような感じです。

タスク開始前に時間を記録
↓
タスクの実行
↓
タスク完了時に時間を記録
↓
経過時間を取得し時間計測の結果を出力する

プロンプトで意図した通りに実行してくれるように工夫して調整します。
今回はサンプルとして以下のようなプロンプトにしてみました。

## 前提

- タスク実行に要した時間を計測してください
- 計測の方法はタイムトラッキング要件にしたがってください

## タイムトラッキング要件

以下の処理は time-tracker MCP サーバーを利用して行なってください

1. タスク開始前の現在時間を取得して出力する
2. タスク終了後の現在時間を取得して出力する
3. タスクの開始時と終了時の時間から経過時間を取得して出力する
4. 最終的に以下の表形式で出力する
   |項目|記録|
   |:---|:---|
   |開始時間|<結果を入力>|
   |終了時間|<結果を入力>|
   |経過時間|<結果を入力>|

## タスク

- src ディレクトリを作成してください
- index.js ファイルを作成してください
- 作成したファイルに四則演算用の関数を書いてください

AI エージェントで実行してみる

プロンプトを入力して実行してみます。まず、先にタスク開始時間を取得しています。続いてタスクが実行されます。そしてタスク完了後に終了時間を取得しています。最後に経過時間(開始時間と終了時間の差分)を計算して、最終的に表形式で表示してくれました。

GPT‑4o で実行した結果

GPT-4.1(preview) で実行した結果

途中 AI がコマンドの実行許可を求めて停止し、こちらが「続行」ボタンを押すまでのタイムラグも含まれてしまうので、純粋に AI が処理中の時間だけを計測できているわけではないですが、それでも概ねやりたいことはできています。

おわりに

もっといいやり方があるかもしれませんが、調べた感じちょっとわからなかったので、とりあえず簡易的にこういった MCP サーバーを作って試してみました。とはいえこれでもないよりは時間計測の手間が省けてだいぶマシではあるのでそれなりに役に立ってはいるかなという感じです。

参考

Discussion