narikiri-mcp 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +12 -3
  2. package/dist/index.js +89 -27
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -19,14 +19,14 @@ MCPプロンプトとしてペルソナ(口調)を配信し、AIアシスタ
19
19
 
20
20
  ## 必要なもの
21
21
 
22
- - **Node.js** v18 以上([公式サイト](https://nodejs.org/)からインストール)
22
+ - **Node.js**([公式サイト](https://nodejs.org/)からインストール)
23
23
  - **npm**(Node.js に同梱)
24
24
  - **MCP Prompts 対応クライアント**([対応クライアント一覧](#対応クライアント)を参照)
25
25
 
26
26
  確認方法:
27
27
 
28
28
  ```bash
29
- node -v # v18.0.0 以上であること
29
+ node -v # バージョンが表示されればOK
30
30
  npm -v # 表示されればOK
31
31
  ```
32
32
 
@@ -162,7 +162,7 @@ claude
162
162
 
163
163
  ### オリジナルキャラクターを作る
164
164
 
165
- `/` から「キャラクター作成」を選ぶと、会話しながらオリジナルのキャラクターを作れる。作ったキャラクターは `~/.narikiri/personas/` に保存され、すぐに使える。
165
+ `/` から「キャラクター作成」を選ぶと、会話しながらオリジナルのキャラクターを作れる。作ったキャラクターは `~/.narikiri/personas/` に保存され、すぐに使える。どのプロジェクトでも共通で表示される。
166
166
 
167
167
  ### 注意事項
168
168
 
@@ -204,6 +204,15 @@ narikiri-mcp は MCP Prompts を使用するため、Prompts 対応のクライ
204
204
  | Cline | 非対応(Tools のみ) |
205
205
  | ChatGPT | 非対応(Tools のみ) |
206
206
 
207
+ ### 動作確認済み環境
208
+
209
+ | 項目 | 確認済み |
210
+ |---|---|
211
+ | OS | macOS |
212
+ | クライアント | Claude Code |
213
+
214
+ Windows / Linux および Claude Desktop 等の他クライアントでも動作する想定ですが、現時点では未検証です。問題があれば [Issue](https://github.com/ogurash/narikiri-mcp/issues) で報告してください。
215
+
207
216
  ## 技術スタック
208
217
 
209
218
  - Runtime: Node.js
package/dist/index.js CHANGED
@@ -10,7 +10,7 @@ import * as z from "zod/v4";
10
10
  const CUSTOM_DIR = path.join(os.homedir(), ".narikiri", "personas");
11
11
  const server = new McpServer({
12
12
  name: "narikiri-mcp",
13
- version: "0.2.1",
13
+ version: "0.3.0",
14
14
  });
15
15
  /** ペルソナをプロンプトとしてサーバーに登録する */
16
16
  function registerPersona(persona) {
@@ -173,38 +173,100 @@ tone パラメータには以下のフォーマットで渡してください:
173
173
  },
174
174
  ],
175
175
  }));
176
- function showSetupGuide() {
177
- const version = "0.2.1";
176
+ import * as readline from "node:readline";
177
+ /** Claude Desktop の設定ファイルパスを OS ごとに返す */
178
+ function getClaudeDesktopConfigPath() {
179
+ switch (process.platform) {
180
+ case "win32":
181
+ return path.join(os.homedir(), "AppData", "Roaming", "Claude", "claude_desktop_config.json");
182
+ case "darwin":
183
+ return path.join(os.homedir(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
184
+ default:
185
+ return path.join(os.homedir(), ".config", "Claude", "claude_desktop_config.json");
186
+ }
187
+ }
188
+ const MCP_ENTRY = {
189
+ persona: {
190
+ command: "npx",
191
+ args: ["narikiri-mcp"],
192
+ },
193
+ };
194
+ /** JSON ファイルに mcpServers.persona を追加する */
195
+ function addMcpConfig(filepath) {
196
+ let config = {};
197
+ if (fs.existsSync(filepath)) {
198
+ try {
199
+ config = JSON.parse(fs.readFileSync(filepath, "utf-8"));
200
+ }
201
+ catch {
202
+ return `${filepath} の JSON が不正です。手動で確認してください。`;
203
+ }
204
+ // 既に設定済みか確認
205
+ const servers = config.mcpServers;
206
+ if (servers?.persona) {
207
+ return `${filepath} には既に persona が設定されています。そのまま使えます!`;
208
+ }
209
+ }
210
+ // 親ディレクトリが存在しない場合(Claude Desktop 未インストール等)
211
+ const dir = path.dirname(filepath);
212
+ if (!fs.existsSync(dir)) {
213
+ return `${dir} が見つかりません。対象のアプリがインストールされているか確認してください。`;
214
+ }
215
+ // mcpServers がなければ作る
216
+ if (!config.mcpServers) {
217
+ config.mcpServers = {};
218
+ }
219
+ config.mcpServers.persona = MCP_ENTRY.persona;
220
+ fs.writeFileSync(filepath, JSON.stringify(config, null, 2) + "\n", "utf-8");
221
+ return `${filepath} に設定を追加しました!`;
222
+ }
223
+ /** 対話式セットアップ */
224
+ function interactiveSetup() {
225
+ const version = "0.3.0";
178
226
  console.log(`
179
227
  narikiri-mcp v${version} — AIの口調を着せ替えるMCPペルソナサーバー
180
-
181
- このコマンドを直接実行してもサーバーは使えません。
182
- 以下の手順でセットアップしてください。
183
-
184
- 【全プロジェクト共通で使う場合】
185
- ~/.claude.json に以下を追加:
186
-
187
- {
188
- "mcpServers": {
189
- "persona": {
190
- "command": "npx",
191
- "args": ["narikiri-mcp"]
192
- }
193
- }
194
- }
195
-
196
- 【特定のプロジェクトだけで使う場合】
197
- プロジェクトルートに .mcp.json を作成し、上と同じ内容を記述。
198
-
199
- 設定後、Claude Code を起動して / を入力するとペルソナが選べます。
200
- 詳しくは https://www.npmjs.com/package/narikiri-mcp を参照してください。
201
228
  `);
229
+ const rl = readline.createInterface({
230
+ input: process.stdin,
231
+ output: process.stdout,
232
+ });
233
+ console.log("セットアップ方法を選んでください:");
234
+ console.log(" [1] Claude Code — 全プロジェクト共通(おすすめ)");
235
+ console.log(" [2] Claude Code — このプロジェクトだけ");
236
+ console.log(" [3] Claude Desktop");
237
+ console.log("");
238
+ rl.question("> ", (answer) => {
239
+ rl.close();
240
+ const choice = answer.trim();
241
+ if (choice === "1") {
242
+ const filepath = path.join(os.homedir(), ".claude.json");
243
+ const result = addMcpConfig(filepath);
244
+ console.log(`\n${result}`);
245
+ console.log("\nClaude Code を起動(または /mcp → Reconnect)して、/ を入力するとペルソナが選べます。");
246
+ }
247
+ else if (choice === "2") {
248
+ const filepath = path.join(process.cwd(), ".mcp.json");
249
+ const result = addMcpConfig(filepath);
250
+ console.log(`\n${result}`);
251
+ console.log("\nClaude Code を起動(または /mcp → Reconnect)して、/ を入力するとペルソナが選べます。");
252
+ }
253
+ else if (choice === "3") {
254
+ const filepath = getClaudeDesktopConfigPath();
255
+ const result = addMcpConfig(filepath);
256
+ console.log(`\n${result}`);
257
+ console.log("\nClaude Desktop を再起動すると、ペルソナが使えるようになります。");
258
+ }
259
+ else {
260
+ console.log("\n1, 2, または 3 を入力してください。");
261
+ process.exit(1);
262
+ }
263
+ });
202
264
  }
203
265
  async function main() {
204
- // ターミナルから直接実行された場合はセットアップ案内を表示
266
+ // ターミナルから直接実行された場合は対話式セットアップ
205
267
  if (process.stdin.isTTY) {
206
- showSetupGuide();
207
- process.exit(0);
268
+ interactiveSetup();
269
+ return;
208
270
  }
209
271
  // MCP クライアント経由の場合は通常起動
210
272
  const transport = new StdioServerTransport();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "narikiri-mcp",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "AIの口調を着せ替えるMCPペルソナサーバー",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",