🕐

「今何時?」を返すだけのMCPサーバーを作った

に公開

背景

ChatGPTのスケジュール機能、便利ですよね。

自分は毎朝、Googleカレンダーやタスクをチェックしてもらって、今日のスケジュールを確認するようにしています。で、日中もタスクの相談をしながら仕事を進めることが多い。

ただ、ひとつ困っていたことがあって。

ChatGPTって、システムプロンプトに日時情報が入っているんですが、会話のラリーを続けていると時間の感覚がズレてくるんですよね。MTGの時間が過ぎてから「次のMTGは〜」とか言い出したり、夜になって仕事終わりそうなのに「今日これからの予定は〜」みたいな話をしてきたり。

「いや、もうその時間過ぎてるんだけど…」ってなる。地味にストレス。

作ったもの

というわけで、現在時刻を返すだけのMCPサーバーを作りました。

https://what-time.kiyo-e.com/mcp

これをChatGPTやClaudeのカスタムコネクタとして登録して、スケジュールやタスクの確認前に毎回呼び出させることで、LLMに常に「今」を意識させることができます。

実装

Cloudflare Workers + MCP SDKで実装しています。コードは50行くらい。

https://github.com/kiyo-e/time-mcp/

import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { createMcpHandler } from 'agents/mcp';
import { z } from 'zod';

const server = new McpServer({
  name: 'mcp-time-worker',
  version: '0.2.0'
});

server.tool(
  'get_time',
  'Returns the current date and time (to the second) in a given IANA time zone.',
  z.object({
    timezone: z.string().describe('IANA time zone, e.g. Asia/Tokyo').optional()
  }),
  async ({ timezone }) => {
    const tz = timezone || 'Asia/Tokyo';
    const now = formatTime(tz);  // ISO 8601形式で返す
    return {
      content: [{ type: 'text', text: now }],
      metadata: { timezone: tz }
    };
  }
);

get_time というツールが1つだけあって、呼ぶと 2025-06-15T14:30:45+09:00 みたいな形式で現在時刻を返します。タイムゾーンはIANA形式(Asia/Tokyo とか America/New_York とか)で指定可能。

時刻のフォーマット部分は Intl.DateTimeFormat を使っていて、UTCオフセットも計算して付与しています。

function formatTime(tz: string): string {
  const now = new Date();
  const parts = new Intl.DateTimeFormat('en-CA', {
    timeZone: tz,
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hourCycle: 'h23'
  }).formatToParts(now)
    .reduce<Record<string, string>>((acc, p) => {
      if (p.type !== 'literal') acc[p.type] = p.value;
      return acc;
    }, {});

  // UTCオフセットを計算
  const utc = new Date(now.toLocaleString('en-US', { timeZone: 'UTC' }));
  const zoned = new Date(now.toLocaleString('en-US', { timeZone: tz }));
  const offsetMinutes = (zoned.getTime() - utc.getTime()) / 60000;
  // ... オフセット文字列を組み立てて返す
}

使い方

ChatGPT(Pro / Plus)

  1. 設定 → アプリとコネクタ → 高度な設定 で「開発者モード」を有効化
  2. コネクタを作成 をクリック
  3. 以下を入力して追加:
    • 名前: いま何時?(任意)
    • URL: https://what-time.kiyo-e.com/mcp
    • 認証: なし
  4. チャットで +アイコン → 追加したコネクタ を選択して有効化

Claude(Pro / Max / Team)

  1. チャット画面の 検索とツール アイコンをクリック
  2. コネクタを管理 を選択
  3. カスタムコネクタを追加 をクリック
  4. 以下を入力して追加:
    • 名前: いま何時?(任意)
    • URL: https://what-time.kiyo-e.com/mcp

あとは、プロンプトで「スケジュールを確認する前に必ず現在時刻を取得して」みたいに指示しておけばOK。

所感

正直、実装で困ったことは特にないです。

むしろ、Cloudflare Workersの手軽さを改めて実感しました。軽く実装して、すぐデプロイ、あとは管理不要。自分がほしいちょっとした機能をサクッと作って公開できるのは本当に便利。

MCPという規格のおかげで、こういう小さなツールでもLLMとの連携が簡単にできるようになったのも良いですね。「時刻を返す」というシンプルな機能でも、LLMのコンテキストに正確な情報を注入できるのは意外と価値がある。

まとめ

  • ChatGPTと長くやり取りしていると、時間感覚がズレてくる問題があった
  • 「今何時?」を返すだけのMCPサーバーを作って解決した
  • MCP URL: https://what-time.kiyo-e.com/mcp
  • リポジトリ: https://github.com/kiyo-e/time-mcp/
  • 使ってみてください

Discussion