
Ts-morph Refactoring
STDIOTypeScript/JavaScript refactoring tools using ts-morph for AST-based code transformations
TypeScript/JavaScript refactoring tools using ts-morph for AST-based code transformations
この MCP サーバーは、ts-morph を利用して TypeScript および JavaScript のコードベースに対するリファクタリング操作を提供します。 Cursor などのエディタ拡張機能と連携し、シンボル名の変更、ファイル/フォルダ名の変更、参照箇所の検索などを AST (Abstract Syntax Tree) ベースで行うことができます。
この MCP サーバーは以下のリファクタリング機能を提供します。各機能は ts-morph
を利用して AST を解析し、プロジェクト全体の整合性を保ちながら変更を行います。
rename_symbol_by_tsmorph
)tsconfig.json
パス、対象ファイルのパス、シンボルの位置 (行・列)、現在のシンボル名、新しいシンボル名rename_filesystem_entry_by_tsmorph
)import
/export
文のパスを自動的に更新します。tsconfig.json
パス、リネーム操作の配列 (renames: { oldPath: string, newPath: string }[]
)。@/
など) を含む参照は更新されますが、相対パスに変換されます。../components
) は、明示的なファイルパス (例: ../components/index.tsx
) に更新されます。export default Identifier;
形式のデフォルトエクスポートの参照は正しく更新されない場合があります。find_references_by_tsmorph
)tsconfig.json
パス、対象ファイルのパス、シンボルの位置 (行・列)。remove_path_alias_by_tsmorph
)import
/export
文に含まれるパスエイリアス (@/components
など) を、相対パス (../../components
など) に置換します。tsconfig.json
パス、処理対象のファイルまたはディレクトリのパス。move_symbol_to_file_by_tsmorph
)tsconfig.json
パス、移動元のファイルパス、移動先のファイルパス、移動するシンボルの名前。必要に応じてシンボルの種類 (declarationKindString
) を指定すると、同名シンボルの曖昧性を解消できます。export
が追加され、移動先ファイルでインポートされます。export default
) されたシンボルはこのツールでは移動できません。mcp.json
に以下のように設定を追加します。npx
コマンドを使用することで、インストール済みの最新バージョンが自動的に利用されます。
{ "mcpServers": { "mcp-tsmorph-refactor": { // 任意のサーバー名 "command": "npx", "args": ["-y", "@sirosuzume/mcp-tsmorph-refactor"], "env": {} // 必要に応じてロギング設定などを追加 } } }
ローカルでソースコードからサーバーを起動する場合は、まずビルドが必要です。
# 依存関係のインストール (初回のみ) pnpm install # TypeScript コードのビルド pnpm run build
ビルド後、mcp.json
で以下のように設定して node
で直接実行できます。
{ "mcpServers": { "mcp-tsmorph-refactor-dev": { // 開発用など、別の名前を推奨 "command": "node", // プロジェクトルートからの相対パスまたは絶対パス "args": ["/path/to/your/local/repo/dist/index.js"], "env": { // 開発時のデバッグログ設定など "LOG_LEVEL": "debug" } } } }
サーバーの動作ログは、以下の環境変数で出力レベルや出力先を制御できます。mcp.json
の env
ブロックで設定します。
LOG_LEVEL
: ログの詳細度を設定します。
fatal
, error
, warn
, info
(デフォルト), debug
, trace
, silent
"LOG_LEVEL": "debug"
LOG_OUTPUT
: ログの出力先を指定します。
console
(デフォルト): 標準出力にログを出力します。開発環境 (NODE_ENV !== 'production'
) で pino-pretty
がインストールされている場合は、見やすい形式で出力されます。file
: 指定されたファイルにログを出力します。MCP クライアントへの影響を避ける場合に設定します。"LOG_OUTPUT": "file"
LOG_FILE_PATH
: LOG_OUTPUT
が file
の場合に、ログファイルの絶対パスを指定します。
[プロジェクトルート]/app.log
"LOG_FILE_PATH": "/var/log/mcp-tsmorph.log"
設定例 (mcp.json
内):
// ... (mcp.json の他の設定) "env": { "LOG_LEVEL": "debug", // デバッグレベルのログを "LOG_OUTPUT": "file", // ファイルに出力 "LOG_FILE_PATH": "/Users/yourname/logs/mcp-tsmorph.log" // ログファイルのパス指定 } // ...
.node-version
または package.json
の volta
フィールドを参照)package.json
の packageManager
フィールドを参照)リポジトリをクローンし、依存関係をインストールします。
git clone https://github.com/sirosuzume/mcp-tsmorph-refactor.git cd mcp-tsmorph-refactor pnpm install
TypeScript コードを JavaScript にコンパイルします。
pnpm build
ビルド成果物は dist
ディレクトリに出力されます。
ユニットテストを実行します。
pnpm test
コードの静的解析とフォーマットを行います。
# Lintチェック pnpm lint # Lint修正 pnpm lint:fix # フォーマット pnpm format
開発中に MCP サーバーの起動シーケンスや標準入出力、エラー出力を詳細に確認したい場合、プロジェクトの scripts
ディレクトリに配置されている mcp_launcher.js
を使用できます。
このラッパースクリプトは、本来の MCP サーバープロセス (npx -y @sirosuzume/mcp-tsmorph-refactor
) を子プロセスとして起動し、その起動情報や出力をプロジェクトルートの .logs/mcp_launcher.log
ファイルに記録します。
使用方法:
mcp.json
ファイルで、mcp-tsmorph-refactor
サーバーの設定を以下のように変更します。
command
を "node"
にします。args
に、scripts/mcp_launcher.js
へのパス (例: ["path/to/your_project_root/scripts/mcp_launcher.js"]
) を指定します。プロジェクトルートからの相対パス (["scripts/mcp_launcher.js"]
) も使用できます。設定例 (mcp.json
):
{ "mcpServers": { "mcp-tsmorph-refactor": { "command": "node", // scripts/mcp_launcher.js へのパス (プロジェクトルートからの相対パス or 絶対パス) "args": ["path/to/your_project_root/scripts/mcp_launcher.js"], "env": { // 元の環境変数設定はそのまま活かせます // 例: // "LOG_LEVEL": "trace", // "LOG_OUTPUT": "file", // "LOG_FILE_PATH": ".logs/mcp-ts-morph.log" } } // ... 他のサーバー設定 ... } }
MCP クライアント (例: Cursor) を再起動またはリロードします。
プロジェクトルートの .logs/mcp_launcher.log
にログが出力されるのを確認してください。
また、MCP サーバー自体のログも、設定されていれば (例: .logs/mcp-ts-morph.log
) 確認できます。
このラッパーを使用することで、MCP サーバーが期待通りに起動しない場合の原因究明に役立ちます。
このパッケージは、GitHub Actions ワークフロー (.github/workflows/release.yml
) を介して npm に自動的に公開されます。
Settings
> Secrets and variables
> Actions
) に NPM_TOKEN
という名前で設定されていることを確認してください。package.json
の version
フィールドをセマンティックバージョニング (SemVer) に従って更新してください。リリースワークフローをトリガーするには、Git タグのプッシュを使用します。
方法: Git タグのプッシュ (リリース時に推奨)
package.json
の version
を変更します (例: 0.3.0
)。package.json
の変更をコミットし、main ブランチにプッシュします。v
プレフィックス付き) を作成し、プッシュします。
git tag v0.3.0 git push origin v0.3.0
Release Package
ワークフローがトリガーされ、パッケージのビルド、テスト、npm への公開が行われます。v0.3.0
) は package.json
の version
(例: 0.3.0
) と完全に一致する必要があります。一致しない場合、ワークフローは失敗します。pnpm run build
と pnpm run test
を実行することをお勧めします。このプロジェクトは MIT ライセンスの下で公開されています。詳細は LICENSE ファイルをご覧ください。