mcpField
M
myopic

myopic

ローカル
github.com/SurajKGoyalバージョン管理08 週間前に更新

myopic について

myopicは、ローカルのコードベースを参照してGitLabのマージリクエストとGitHubのプルリクエストをレビューするオープンソースのMCPサーバーです。範囲を制限した差分表示、依存関係や呼び出し経路の分析に対応し、要求に応じて行内コメントを投稿できます。

主な機能

  1. 01GitLab MRとGitHub PRのレビュー
  2. 02範囲を制限した構造化差分表示
  3. 03依存関係と呼び出し経路の追跡
  4. 04Ollamaによる類似コードの検索
  5. 05スレッドの確認とコメント投稿

活用シーン

  1. 01周辺コードも踏まえた変更レビュー
  2. 02変更されたシンボルの影響範囲の確認
  3. 03類似コードや規約のずれの発見
  4. 04修正の確認と行内コメントの投稿

MCP 対応

myopicはstdio MCPサーバーで、MR・PRデータの読み取り、ローカルリポジトリの分析、レビューコメントの確認と行内投稿を行うツールを提供します。大半は読み取り専用で、コメント投稿が明示的な書き込み操作です。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"surajkgoyal-myopic": {
"command": "uvx",
"args": [
"myopic"
]
}
}
}
起動コマンドuvx myopic

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypimyopic0.1.11

ツール

12

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
urlstringはい

詳細

myopic

PyPI version Python License: MIT MCP Registry

レジストリで最も皮肉の効いた名前を持つコードレビューツール用 MCP です。 名前とは裏腹に、目が近視というわけではありません。目の前の差分だけでなく、コードベース全体を対象にマージリクエストをレビューします。

小さな差分で formatPrice が文字列を返すように変更されます。差分だけを見るレビューツールは問題ないと判断しますが、myopic はリポジトリ全体を確認し、呼び出し元が4つ壊れることと、既存の重複を見つけます。どちらも差分には現れません。

公開しながら開発中です。 GitLab のマージリクエストと GitHub のプルリクエストをレビューします。どちらの URL も渡せます。変更を読み込み、コードベース全体を照らし合わせてレビューし、インラインコメントとしてレビューを投稿できます。Issue や PR も歓迎します。


理由

重要なバグは、差分の中にあることはほとんどありません。差分に表示されていない部分に潜んでいます。たとえば、3ファイル離れた場所にある、変更によって壊れる呼び出し元。このファイルだけがひそかに外れている、同じ役割を持つ他のファイルがすべて従っている規約。あるいは、すでに存在するヘルパーと重複する新しいヘルパーです。パッチだけを読むレビューツールは視野が狭いのです。

myopic はオープンソースのMCPサーバーです。すでに利用している AI クライアント(Claude、Cursor、…)に、コードベースを把握している人のようにレビューするための構造化されたコンテキストを提供します。お使いのマシン上で動作するため、コードが外部に送信されることはなく、PR ごとの料金もかかりません。レビューは、ご自身の基準を適用したご自身のエージェント内で行われます。

  • 変更を正確に読み取ります — 差分を行番号付きのハンク、または関数/クラスごとにまとめて確認できます。あらゆるサイズの MR でトークン量を安全に扱えます(10,000 行の差分でもコンテキストウィンドウを超えません)。
  • コードベース全体と照らし合わせてレビューします — 変更されたコードの呼び出し元(影響範囲)、呼び出し元/呼び出し先のグラフ、および必要に応じて意味的に類似したコードを確認できるため、規約の破綻や重複を見つけられます。

SQL データベースについて AI に永続的なメモリを提供する MCP サーバー、amnesicと併用できます。


ツール

計画中と明記されていないものは、以下のすべてが現在利用できます。

マージリクエストを読み取る(設計上、トークンを安全に扱います):

ツール機能
mr_review_statusMR のメタデータ、すべてのディスカッションスレッド、解決済み/未解決の状態を 1 回の呼び出しで取得します
mr_changed_files変更されたファイルの内容を含まない一覧(パス、統計、ノイズフラグ)を取得します。差分の内容は含まないため、非常に大きな MR でも小さく保てます
mr_diff_sections関数/クラスごとにグループ化した差分(AST を認識)を、予算内で取得します
mr_diff_lines行番号付きのハンクとして差分を取得します。インラインコメントの正確な位置を特定でき、予算内で取得します

大規模な MR では、差分ツールは上限付きのページを返し、残りをエラーにする代わりに omitted_files/truncated に一覧表示します。ロックファイル、生成コード、バイナリは一覧に表示されますが、展開されません。残りを取得するには files_filter を使用してください。

コードベース全体と照合してレビューする(ローカルクローンを指定):

ツール機能
dependency_impact変更されたシンボルが使用されているすべての箇所を取得します。影響範囲を調べます(ripgrep + tree-sitter)
trace_call_chainシンボルの呼び出し元/呼び出し先のグラフを取得します
mr_review_context要点 — 変更された各シンボルについて、その影響(常に表示)と、オプションのレイヤーが有効な場合は意味的に類似したコードを取得します

セマンティックレイヤー(組み込み — Ollama が必要です)— index_repo、code_search、 および mr_review_context のセマンティック機能です。詳細は以下をご覧ください。

仕上げ — 検証し、依頼に応じてコメントする:

ツール機能
mr_verify_review既存の各レビュースレッドについて、コメントされた行付近の差分変更を確認します。後続のコミットで対応されたかを確認します(読み取り専用)
mr_post_comments唯一の書き込み機能 — 指数バックオフを使い、キューから 1 件ずつインラインコメントを投稿します(下書きや一括公開はありません)。これにより、部分的な進捗が保持され、レート制限も守られます

今後の予定については、ROADMAP.md をご覧ください。


インストール

pipx を使うと、myopic を他から隔離してインストールし、PATH に追加できます。

pipx install myopic

通常の venv を使う場合は、python3 -m venv ~/.venvs/myopic && ~/.venvs/myopic/bin/pip install myopic を実行し、例で myopic と記載されている箇所ではそのバイナリを使用してください。

セットアップ

myopic には、api(または read_api)スコープを持つ個人アクセストークンが必要です。ウィザードに沿って設定できます。

myopic init     # prompts for URL + token, verifies, saves both
myopic test     # ✓ Authenticated to https://gitlab.com as <you>
myopic doctor   # health-check config + (if enabled) the semantic layer

トークンは ~/.config/myopic/.env に保存され(chmod 600)、TOML から ${GITLAB_TOKEN} として参照されます。設定ファイル自体に保存されることはありません。myopic set-secret でローテーションするか、myopic init --template を使って手動で編集してください。

GitHub の PR: PR の URL を渡すだけです。環境変数、または config.toml の [github] セクションに、GITHUB_TOKEN(PR の読み取りアクセス権を持つ PAT)を設定してください。GitHub Enterprise の場合は、[github].url にホストを設定してください。

AI クライアントに追加する

Claude Code — 設定ファイルを編集せず、コマンドを 1 つ実行するだけです。

/plugin marketplace add https://github.com/SurajKGoyal/myopic-marketplace
/plugin install myopic@myopic

その他の MCP クライアント(Cursor、Claude Desktop など)— myopic コマンドを指定してください。

{
  "mcpServers": {
    "myopic": {
      "command": "myopic"
    }
  }
}

クライアントが PATH 上で見つけられない場合は、絶対パスを使用してください(pipx は ~/.local/bin/myopic にインストールします)。

myopic init の代わりにインラインで設定する

トークンを env ブロックに記述し、設定ファイルを省略してください。myopic は環境変数から GITLAB_TOKEN/GITHUB_TOKEN を読み取ります。

{
  "mcpServers": {
    "myopic": {
      "command": "myopic",
      "env": { "GITLAB_TOKEN": "glpat-…", "MYOPIC_AUTO_PULL": "1" }
    }
  }
}

MYOPIC_AUTO_PULL=1(任意)を設定すると、初回使用時に埋め込みモデルがない場合、エラーにせずダウンロードします。

使用方法

AI にマージリクエストを指定します。

「この MR をレビューしてください:https://gitlab.com/group/project/-/merge_requests/42」

クライアントが実行できる効果的なフローは、まず mr_changed_files で変更の概要を確認し → 大規模な MR では mr_diff_sections、それ以外では mr_diff_lines で変更内容を読み取り → ローカルクローンをチェックアウトした状態で、リスクのある変更済みシンボルに対して dependency_impact / trace_call_chain(または mr_review_context)を実行し、それらに依存するすべてのコードと照らし合わせてレビューします。

グラフツールは root でチェックアウトされている内容を分析するため、先に MR のブランチをチェックアウトしてください。そうしないとターゲットブランチをレビューすることになり、MR の新しいコードは含まれません。myopic worktree <mr-url> <repo> を実行すると、使い捨てワークツリーで MR のヘッドをチェックアウトします(メインのチェックアウトには影響しません)。さらに、root に指定するパスを表示します。mr_review_context は、root に MR のヘッドがない場合にも警告します。

フォークの PR にも対応しています。フォークのブランチはリモートに存在しないため、GitHub PR のヘッドは refs/pull/N/head 経由で取得されます。PR がブランチから作成された場合もフォークから作成された場合も、ベースリポジトリから取得できます。


セマンティック検索(組み込み — Ollama が必要)

「これはコードベースの他の部分と一貫していますか?」という疑問、つまり重複、規約のずれ、類似パターンの確認には、セマンティックレイヤーが役立ちます。ベースインストールに同梱されており(lancedb + httpx)、外部要件は Ollama が実行中であることだけです。

埋め込みには、ご自身で実行するローカル Ollama サーバーを使用します。コードがマシンの外に出ることはありません。myopic は HTTP 経由で Ollama と通信します。Ollama を同梱したり、起動したりはしません。最初に一度だけ必要な準備は次のとおりです。

  1. Ollama を実行します(デフォルトは localhost:11434。または MYOPIC_OLLAMA_URL を設定します)。
  2. 埋め込みモデルを取得します:ollama pull unclemusclez/jina-embeddings-v2-base-code。

myopic doctor は両方を確認し、モデルの取得も提案します。

埋め込みはハイブリッド検索(ベクトル検索 + 全文検索)に対応する組み込みの LanceDB インデックスに保存され、mr_review_context は変更された各シンボルを、セマンティックに類似するコードで補足します。index_repo を手動で実行する必要はありません。初回のレビュー時にリポジトリのインデックスを作成し、古くなった場合は自動的に更新します(MYOPIC_AUTO_INDEX=0 で無効化できます。グラフ処理にはインデックスは不要で、常に実行されます)。明示的な実行や cron での利用には、引き続き index_repo / myopic index を使えます。

インデックス作成は差分ベースで、鮮度を考慮します。 最初の index_repo は全体を構築します。その後は内容が変わったファイルだけを再埋め込みするため、更新は低コストです。index_status(root) は、インデックスが最新か、stale(main から遅れているコミット数を含む)か、別のモデルで構築されたものかを報告します。鮮度は現在のチェックアウトではなく、リポジトリのメインラインを基準に測定されるため、フィーチャーブランチをレビューしてもインデックスが古いとは判定されません。古くなるのは main 自体が進んだ場合だけです。code_search と mr_review_context はこのステータスを引き継ぐため、古いインデックスによってレビューの品質が気付かないうちに低下することはありません。古い場合は更新を提案するよう AI に伝えます。

インデックスはチェックアウトごとではなく、リポジトリごとに作成されます。MR のヘッドで myopic worktree を作成しても、クローンのインデックスを共有するため、新しいブランチをレビューするたびに再構築されることはありません。そのブランチで変更されたファイルだけが再埋め込みされます。

同じリポジトリの別のクローンには独自のインデックスが作成され、削除したリポジトリのインデックスは残ります。インデックス作成時に、そのような使われなくなったコピーは自動的に削除されます。自分で確認して再利用可能な領域を解放するには、次を実行してください。

myopic prune            # dry-run: what's stale, and how much it's costing
myopic prune --apply    # delete them

引き続き使う2つ目のクローンのインデックスは保持されます。削除されるのは到達不能なものだけです。

myopic は stdio サーバー(バックグラウンドプロセスなし)であるため、スケジューラーは組み込まれていません。ただし、myopic index /path/to/repo をスケジューラーから実行できます。cron または launchd に設定すれば、バックグラウンドでインデックスを最新に保てます。

# refresh hourly (incremental — usually seconds)
0 * * * * myopic index /path/to/repo

モデル/エンドポイントを変更するには、MYOPIC_EMBED_MODEL / MYOPIC_OLLAMA_URL を設定します。


設定リファレンス

ソースキー備考
config.toml[gitlab].urlGitLab のベース URL(デフォルトは https://gitlab.com)
config.toml[gitlab].token${GITLAB_TOKEN} を使用してください。ハードコードしないでください
.env(設定ファイルと同じ場所)GITLAB_TOKEN実際のトークン値(chmod 600)
環境変数MYOPIC_GITLAB_URL / GITLAB_URLTOML がない場合のフォールバック
環境変数MYOPIC_GITLAB_TOKEN / GITLAB_TOKENTOML がない場合のフォールバック
環境変数MYOPIC_CONFIG / MYOPIC_HOME設定ファイル/ディレクトリを上書き
環境変数MYOPIC_EMBED_MODEL / MYOPIC_OLLAMA_URLセマンティックレイヤーのモデルとエンドポイント
環境変数MYOPIC_AUTO_INDEXレビュー中の自動インデックス作成を無効にするには 0 を指定します(デフォルトでは有効)
環境変数MYOPIC_AUTO_PULL初回使用時に埋め込みモデルが見つからない場合、自動取得するには 1 を指定します(デフォルトでは無効)

セキュリティ

  • 明示的な書き込みは1つだけで、それ以外はすべて読み取り専用です。 レビューを変更するのは mr_post_comments のみで、実行するのは要求された場合に限られます。それ以外のツールは、MR とリポジトリのデータを読み取るだけです。書き込みが推測で実行されることはありません。
  • トークンはローカルに保存されます。 .env または環境変数に保存され、設定した GitLab インスタンスにのみ送信されます。第三者に送信されることはありません。
  • 認証エラーからはトークンが除去されるため、エラーメッセージにトークンが漏れることはありません。
  • セマンティックレイヤーはすべてローカルで実行されます(Ollama とディスク上のインデックスを使用)。コードが第三者に送信されることはありません。

開発

pip install -e ".[dev]"
pytest                           # hermetic — no network, Ollama, or lancedb needed

ライセンス

MIT © Suraj Goyal

mcp-name: io.github.SurajKGoyal/myopic

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。