every Tech Blog

株式会社エブリーのTech Blogです。

Cursor v1.0 で追加された Memories を試してみる

Cursor v1.0 で追加された Memories を試してみる

はじめに

こんにちは、TIMELINE 開発部 Service Development をしているhondです!
タイトルにある通り、Cursorの0.51から待望のMemoriesがBETA機能としてリリースされました!
リリースされたばかりということでChangeLogにも詳細はないので、自分なりに使ってみた感想や調査結果を共有できればと思います! このblog執筆時点の2025/06/02時点では、ChangeLogにv0.51やGenerate Memoriesに関しての記述はありませんでしたがv1.0リリースにてChangeLogにv1.0の内容とともにMemoriesの内容が追加されました。

注意

2025/06/02現在、BETA機能としてリリースされたMemoriesですが、privacy modeが無効でないと使うことができません。
privacy modeを無効にした場合、どのような情報がCursorに共有され、自分の環境で使う際には問題はないのか確認の上利用することをお勧めします。

Memories とは

以前のCursor Custom modes を利用した cursor-memory-bank のワークフローを試してみるでも取り上げましたが、メモリとはセッション間での命令内容やプロジェクトの知識を構造化したドキュメントとして保存する方法です。これによって新しいセッションを開始した時や、コンテキストウィンドウが肥大化した際にも、プロジェクトの詳細や技術スタック、アーキテクチャ、現在取り組んでいる内容やそれに関する進捗を繰り返し説明する必要をなくす一つの手段です。
ClineではBlog公式ドキュメントで、Memory Bankを導入する方法が紹介されていましたが、Cursorではなかったので、これらの方法を参考に運用していた人も多いのではないでしょうか。ちなみに、CursorのforumでもMemory Bank導入に関してはFeature Requestとして投稿されて、多くのユーザーが関心を寄せていました。

Generate Memoriesの設定

0.51で追加されたGenerate Memories機能はCursor Settings > Rulesから確認することができます。

Generate Memoriesの設定
冒頭でも説明した通り、privacy modeが無効でないと機能を有効化することはできません。
設定は以上になります!

実際に使ってみた

以降、実際に行った内容はこちらのRepositoryにアップロードしてあります。

検証環境

  • Cursor Version : 0.51.1
  • Model : claude-4-sonnet
  • User Rules : なし
  • Project Rules : なし
  • Repositoryの状態 : gitの設定のみ
  • Chat Mode : Agent
  • 目的 : Goを用いた時刻を返すMCP Serverを作成させる

実際のやりとり

下記はMCP Serverの作成とMemoryを作成するにあたり、実際に行ったやりとりです。

User

golang を用いて現在時刻や引数として渡された時間分経過した時の時刻を取得できる MCP server を作成して

Cursor

Golang を使用して時刻を取得できる MCP server を作成いたします。まず、プロジェクトの構造を確認してから実装を進めます。 Ran tool プロジェクトが初期状態のようですね。Golang MCP server を作成していきます。まず、必要なファイル構造を作成します。 MCP Go SDK が存在しないようですね。標準的な MCP プロトコルを実装するために、JSONRPC ベースの実装を作成します。 次に、README.md ファイルを作成して使用方法を説明します。 最後に、テスト用のサンプルスクリプトを作成します。 テストクライアントのファイル名を変更して、型エラーを修正します。 Ran tool 最後に、実際にサーバーが動作するかテストしてみましょう。

go mod tidy
go build -o time-mcp main.go
cd test && go run client.go

素晴らしい!MCP Time Server が正常に動作しています。最後にプロジェクトの構造を確認しましょう。

cd .. && find . -type f -name "*.go" -o -name "*.md" -o -name "go.mod" | sort

完成!

Golang を使用した時刻取得機能を持つ MCP server を正常に作成しました。以下が実装された機能です:

🎯 主な機能

  1. 現在時刻取得 (get_current_time)

    • 現在の時刻を様々なフォーマットで取得
    • デフォルトは RFC3339 形式
  2. 時間加算 (add_minutes_to_current_time)

    • 現在時刻に指定された分数を加算(負の値で過去の時刻も取得可能)
    • 様々なフォーマットに対応

📁 プロジェクト構成

  • main.go - MCP Time Server のメイン実装
  • go.mod - Go module 定義
  • README.md - 詳細な使用方法とドキュメント
  • test/client.go - 動作確認用のテストクライアント
  • time-mcp - ビルドされた実行可能ファイル

✨ 特徴

  • 標準ライブラリのみ使用 - 外部依存関係なし
  • 豊富な時刻フォーマット対応 - RFC3339、Kitchen、JST 等 20 種類以上
  • MCP 準拠 - Model Context Protocol 2024-11-05 に準拠
  • JSON-RPC 2.0 - 標準的なプロトコル実装
  • エラーハンドリング - 適切なエラーレスポンス
  • 日本語対応 - 日本語でのメッセージ表示

🚀 使用方法

# ビルド
go build -o time-mcp main.go

# 実行
./time-mcp

# テスト
cd test && go run client.go

テスト結果からも分かるように、サーバーは正常に動作し、現在時刻の取得や時間の加算機能が期待通りに動作しています。MCP プロトコルに準拠しているため、MCP 対応のクライアントから利用することができます。

User

ここまでの実装でメモリに保存する必要のある内容はある?

Cursor

はい、このプロジェクトの実装について、メモリに保存すべき重要な内容がいくつかあります。特に、MCP プロトコルの実装パターンや技術的な決定事項は今後の参考になります。 Ran tool Ran tool メモリに保存した内容は以下の通りです:

保存した知識

1. MCP Server 実装パターン(Golang)

  • 標準ライブラリのみでの MCP サーバー実装方法
  • 必須の MCP メソッド(initialize、tools/list、tools/call)
  • JSON-RPC 2.0 準拠のレスポンス構造
  • 適切なエラーハンドリング
  • Go の時刻フォーマット活用法

2. MCP ツール定義のベストプラクティス

  • JSON Schema を使った InputSchema の適切な定義
  • 日本語対応のアプローチ
  • 引数の柔軟性とデフォルト値設定
  • 型安全な引数解析の実装
  • E2E テストの戦略

これらの知識は、今後 MCP サーバーを実装する際や、既存のサーバーを拡張する際に非常に有用です。特に、標準ライブラリのみでの実装パターンや、適切なエラーハンドリング、テスト戦略などは再利用可能な重要な知見です。

生成されたMemory

下記は実際にGenerate Memories機能によって生成されたUser Ruleになります。

Golang で MCP(Model Context Protocol)サーバーを実装する際の重要なパターン:

1. **標準ライブラリのみでの実装**: 外部依存関係なしで JSON-RPC 2.0 ベースの MCP サーバーを実装可能。bufio.Scanner + os.Stdin/Stdout で標準入出力通信を実現。

2. **必須の MCP メソッド**: initialize(プロトコルバージョン 2024-11-05、capabilities、serverInfo)、tools/list(利用可能ツール一覧)、tools/call(ツール実行)の 3 つが基本。

3. **レスポンス構造**: MCPResponse は必ず jsonrpc:"2.0"、id、result/error フィールドを含む。ツール実行結果は content 配列内に type:"text"と text フィールドで返す。

4. **エラーハンドリング**: JSON-RPC 標準エラーコード(-32601: Method not found, -32602: Invalid params)を使用。

5. **時刻フォーマット対応**: Go の time 定数(time.RFC3339、time.Kitchen 等)を活用し、カスタムフォーマット(JST 等)も追加可能。

考察

一回目のプロンプトでMCP Server自体の実装は完了していたので、そのタイミングでMemoryが自動で作成されると思ったのですが、作成されなかったので「ここまでの実装でメモリに保存する必要のある内容はある?」のように明示的にメモリに保存するように指示することでMemoryが作成されました。
実際のやりとりではわかりづらいですが、「はい、このプロジェクトの実装について、メモリに保存すべき重要な内容がいくつかあります。特に、MCP プロトコルの実装パターンや技術的な決定事項は今後の参考になります。」の後の「Ran tool」でUser Rules updateが実行されて、User Rulesに書き込まれています。
ClineのMemory Bankの設定では大事だと思った部分をMemory Bankに保存するルールがあったため、一定明確な指示をしなくても保存してくれていたので、もしGenerate Memoriesでは明確な指示が必要な場合は少し使い勝手が悪そうだなと感じました。
また、設定の際に気づいた人もいるかと思いますが、今回のGenerate Memoriesで作成されるのはあくまでUser Rulesになります。そのため、今までプロジェクトレベルでカスタマイズしたルールを共有するなどのアプローチをとっていて、Generate Memoriesの結果を共有する場合は、一度自分で設定のUser Rulesを開いて、そこから今回取得された設定を別途ファイルに書き出す必要があります。

まとめ

まだBETA版ではありますが、Memory Bank機能は個人的にも期待していて、ずっとforumを追っていたので、公式で導入されたのは嬉しい限りです!
Memory Bankを実装したMCP Serverを使うアプローチもありますが、それを用いない場合、必要なプロジェクトで都度Memory Bankに関するルールを記述するかグローバルに設定する必要があったので、その設定がなくなるのは一つCursorの強みになるのかなと感じました。
また、Generate Memoriesが導入されたためか、User Rulesも複数設定できるようになり、管理が容易になった点も今回のアップデートの良い点だと思います。ルール設定などまだベストプラクティスが見つけられていないので、Generate Memoriesで作成されたものを採用しつつ、より開発効率を上げていきたいと思います。