senpai.nvimのプロジェクト毎にルール・MCPを設定する方法

senpai.nvimというNeovimのAIプラグインで、「プロジェクト固有のルール(プロンプト)・MCP」が設定できるようになったので解説します。

senpai.nvimの紹介については別の記事Neovimの履歴管理ができるAIプラグインsenpai.nvimの使い方に書いています。

プロジェクトルール機能とは

senpai.nvimでは、プラグインの設定として全リポジトリ共通のシステムプロンプトを設定指定できますが、「リポジトリ毎」にもプロンプトを設定できます。

複数ファイルに分けて書けます。「testディレクトリだけのルール」「拡張子がluaの場合のルール」のようにルール毎に適用範囲を設定可能です。

どこに書けばいいの?

プロジェクトの./senpai/prompts/ディレクトリの中にmdxファイルを作成します。

たとえば、senpai.nvim自体が使っているルールは次のような構成になってます。

.senpai
├── mcp.json # 後述
└── prompts
├── project.mdx
├── back_end.mdx
├── front_end.mdx
├── test.mdx
└── treesitter.mdx
src/
lua/
tests/
...

1ファイルだけでもかまいません。

ルールの書き方

ルールはMarkdownで書けます。特別な文法を覚える必要はありません。英語はもちろん日本語でもOKです。

この文章を読んだら「おはよう!」と挨拶すること。

フロントマターの説明書きや適用範囲の指定は任意です。

---
description: "Back-end side of senpai.nvim"
globs: "src/**/*.ts"
---
You are a professional TypeScript engineer.

フロントマターのdescription

descriptionは人間用にそのルールの概要を書きます。自分がわかりやすければOKです。

フロントマターのglobs

globsにはルールの適用範囲をglob形式を使って指定します。stringかstringの配列で書きます。

---
description: "Back-end side of senpai.nvim"
globs: ["src/**/*.ts", "foo/**/*.js"]
---

サポートしている文法を具体的に知りたい人はBunのドキュメントSupported Glob Patternsをご覧ください。面倒な人やglobが分からない人はAIに聞けば大丈夫です。

globsを書かない場合は、プロジェクト共通のルールとして毎回読み込むようにします。

ファイルの添付

実際にルールを適用するときは、チャットの入力欄に[bar.ts](./foo/bar.ts)のようにリンク形式で書いたファイルが添付されます。

blink.cmpsnacks.nvimを使っている人は/fileでピッカーによる選択ができます。
この補完&Finderの対応プラグインは今後増やしたいと考えてます。

全プロジェクト共通のシステムプロンプト

プロジェクト関係なく設定したい場合はプラグインの設定として書けます。

require("senpai").setup({
chat = {
system_prompt = "日本語で回答してください"
}
})

プロジェクト固有のMCP設定

プロジェクト毎にMCPを設定したい場合は.senpai/mcp.jsonに書きます。

{
"mcpServers": {
"mastra": {
"command": "bunx",
"args": ["-y", "@mastra/mcp-docs-server"]
},
"daisyUi": {
"command": "bunx",
"args": ["-y", "sitemcp", "https://daisyui.com", "-m", "/components/**"]
}
}
}

全プロジェクト共通のMCP設定

全プロジェクトで使いたいMCPがあれば、プラグインの設定として書きます。

require("senpai").setup({
mcp = {
servers = {
sequential = {
command = "bunx",
args = { "-y", "@modelcontextprotocol/server-sequential-thinking" },
},
},
},
})

ルールの適用確認と再読み込み

ルールが読み込まれたか確認したい場合は次のように「分かったら返事!」的なことを指示してみましょう。

First, when you refer to this sentence, greet it with "I love Neovim!"

この方法はClineのプロンプト集に書いてありました。

実装

このプラグインの作者は筆者です。CursorのProject rulesを参考にしました。mdcファイルにはそんなに馴染がなかったのでmdxにしました。

筆者は活用できてませんが、mdxなので変数が使えます。

---
description: "Front-end side of senpai.nvim"
globs: "lua/senpai/**/*.lua"
---
export const foo = "Ohayo";
{foo}!

変数・import周りは全然テスト書けてないので、こういう例でもうまく行ったぞみたいな報告があればうれしいです。


以上、senpai.nvimでのプロジェクトルール・MCPの設定方法の解説でした。