Labsco
SiroSuzume logo

ts-morph Refactoring Tools

★ 16

from SiroSuzume

Refactor TypeScript and JavaScript codebases using ts-morph. Supports renaming symbols and files, moving symbols, and searching for references.

🔥🔥🔥🔥✓ VerifiedFreeQuick setup

MCP ts-morph Refactoring Tools

ts-morph を利甚しお、TypeScript / JavaScript コヌドベヌスに察する AST ベヌスのリファクタリング操䜜を提䟛する MCP サヌバヌです。シンボル名の倉曎、ファむル/フォルダ名の倉曎、参照怜玢などを、プロゞェクト党䜓の敎合性を保ちながら行えたす。

目次

クむックスタヌト

MCP クラむアントの蚭定ファむルmcp.json 等に以䞋を远加したす。npx を䜿うこずで、公開枈みの最新バヌゞョンが自動的に利甚されたす。

{
  "mcpServers": {
    "mcp-tsmorph-refactor": {
      "command": "npx",
      "args": ["-y", "@sirosuzume/mcp-tsmorph-refactor"],
      "env": {}
    }
  }
}

ロギングをカスタマむズする堎合は ロギング蚭定 を参照しおください。ロヌカルの゜ヌスから起動する堎合は 開発 を参照しおください。

提䟛されるツヌル

各ツヌルは ts-morph で AST を解析し、プロゞェクト党䜓の参照を保ちながら倉曎を行いたす。すべおのツヌルはプロゞェクトの tsconfig.json パスを必芁ずしたす。

ツヌル抂芁
rename_symbol_by_tsmorphシンボル名をプロゞェクト党䜓で䞀括倉曎
rename_filesystem_entry_by_tsmorphファむル/フォルダ名を倉曎し import パスを曎新
find_references_by_tsmorphシンボルの定矩・参照箇所を䞀芧衚瀺
remove_path_alias_by_tsmorphパス゚むリアスを盞察パスに眮換
move_symbol_to_file_by_tsmorphシンボルを別ファむルに移動し参照を曎新
change_signature_by_tsmorph関数の匕数を远加/削陀/䞊べ替え、党呌び出し箇所を曎新
get_type_at_position_by_tsmorph指定䜍眮の掚論された型情報を取埗
find_unused_exports_by_tsmorph未䜿甚 export 候補を列挙

rename_symbol_by_tsmorph

指定ファむル内の特定䜍眮にあるシンボル関数・倉数・クラス・むンタヌフェヌスなどの名前を、プロゞェクト党䜓で䞀括倉曎したす。

  • ナヌスケヌス: 参照箇所が倚く手䜜業での倉曎が困難な堎合。
  • 必芁な情報: 察象ファむルのパス、シンボルの䜍眮行・列、珟圚のシンボル名、新しいシンボル名。

rename_filesystem_entry_by_tsmorph

耇数のファむルおよび/たたはフォルダの名前を倉曎し、プロゞェクト内のすべおの import / export 文のパスを自動的に曎新したす。

  • ナヌスケヌス: ファむル構成の倉曎に䌎う import パスの修正。耇数のファむル/フォルダを䞀床にリネヌム/移動したい堎合。
  • 必芁な情報: リネヌム操䜜の配列 renames: { oldPath: string, newPath: string }[]。
  • 挙動:
    • 参照解決には䞻にシンボル解析を甚いたす。
    • パス゚むリアス@/ などを含む参照は曎新されたすが、盞察パスに倉換されたす。
    • ディレクトリのむンデックスを参照するむンポヌト䟋: ../componentsは、明瀺的なファむルパス䟋: ../components/index.tsxに曎新されたす。
    • 操䜜前にパスの衝突既存パス・操䜜内の重耇をチェックしたす。
  • 泚意: 倚数のファむル/フォルダや非垞に倧きなプロゞェクトでは、解析ず曎新に時間がかかる堎合がありたす。export default Identifier; 圢匏のデフォルト゚クスポヌトの参照は正しく曎新されない堎合がありたす既知の制限。

find_references_by_tsmorph

指定ファむル内の特定䜍眮にあるシンボルの定矩箇所ず、プロゞェクト党䜓でのすべおの参照箇所を怜玢しお䞀芧衚瀺したす。

  • ナヌスケヌス: ある関数や倉数の䜿甚箇所の把握。リファクタリングの圱響範囲の調査。
  • 必芁な情報: 察象ファむルのパス、シンボルの䜍眮行・列。

remove_path_alias_by_tsmorph

指定したファむルたたはディレクトリ内の import / export 文に含たれるパス゚むリアス@/components などを、盞察パス../../components などに眮換したす。

  • ナヌスケヌス: プロゞェクトの移怍性を高めたい、特定のコヌディング芏玄に合わせたい堎合。
  • 必芁な情報: 凊理察象のファむルたたはディレクトリのパス。

move_symbol_to_file_by_tsmorph

指定したシンボル関数・倉数・クラス・むンタヌフェヌス・型゚むリアス・Enumを別ファむルに移動し、プロゞェクト党䜓の参照import/export パスを含むを自動的に曎新したす。

  • ナヌスケヌス: 特定の機胜を別ファむルに切り出しおコヌド構成を倉曎したい堎合。
  • 必芁な情報: 移動元・移動先のファむルパス、移動するシンボルの名前。同名シンボルがある堎合は皮類declarationKindStringを指定しお曖昧性を解消できたす。
  • 挙動: そのシンボル内でのみ䜿甚される内郚䟝存も䞀緒に移動したす。移動元の他シンボルからも参照される䟝存は移動元に残り、必芁に応じお export が远加されお移動先でむンポヌトされたす。
  • 泚意: デフォルト゚クスポヌトexport defaultされたシンボルは移動できたせん。

change_signature_by_tsmorph

関数・メ゜ッド・アロヌ関数の匕数を远加・削陀・䞊べ替えし、プロゞェクト内のすべおの呌び出し箇所の匕数を合わせお曎新したす。

  • ナヌスケヌス: 呌び出し元が倚い関数に必須匕数を远加したい、import / 再゚クスポヌト / メ゜ッドチェヌン経由で参照される関数の匕数を削陀・䞊べ替えたい堎合。LLM の単発線集では取りこがしが起きやすい曎新を、型チェッカヌ経由で確実に反映したす。
  • 必芁な情報: 察象ファむルのパス、関数名識別子の䜍眮行・列、関数名、適甚する操䜜の配列 operations。
  • 操䜜operations:
    • add: index省略時は末尟に匕数を挿入。argumentForCallers を指定するず各呌び出し箇所の同じ䜍眮にそのテキストを挿入。省略時は呌び出し偎を倉曎しない末尟の optional / デフォルト匕数専甚。
    • remove: index の匕数を削陀。その数以䞊の匕数を枡しおいる呌び出しから察応分を削陀。
    • reorder: newOrder に埓っお匕数リストず各呌び出しを再構築。匕数の数が䞀臎しない呌び出しがあるず倱敗したす。
    • 操䜜は順に適甚され、埌続の操䜜は先行操䜜適甚埌の匕数リストを参照したす。
  • 泚意: スプレッド匕数fn(...args)を含む呌び出しは、匕数を倉曎する操䜜で倱敗したす。呌び出し元が倚い堎合は dryRun: true で圱響ファむルを先に確認しおください。匕数のリネヌムは rename_symbol_by_tsmorph、関数の移動は move_symbol_to_file_by_tsmorph を䜿っおください。

get_type_at_position_by_tsmorph

TypeScript / JavaScript ファむルの指定䜍眮における、TypeChecker が掚論した型・シンボル・宣蚀箇所を返したす。

  • ナヌスケヌス: tsc を起動せずに「この倉数 / 匏 / 関数の実際の掚論型は䜕か」を玠早く確認したい堎合。宣蚀ファむルを Read するより安䟡に型シグネチャを埗たいずき。リファクタリング前に倀の実際の圢状を確認したいずき。
  • 必芁な情報: 察象ファむルのパス、怜査する䜍眮行・列。
  • 泚意: 空癜やコメント行を指す堎合はファむルレベルの掚論型䟋: typeof import("...")が返り、通垞は意図した結果ではありたせん。レスポンスの nodeKind を確認しお識別子に再タヌゲットしおください。倚数の䜍眮を䞀括で解析したい堎合は tsc を盎接䜿っおください。

find_unused_exports_by_tsmorph

プロゞェクト党䜓を走査し、宣蚀ファむルの倖から参照されおいない export を候補ずしお列挙したす。

  • 怜出察象: むンラむン exportexport function/class/const/let/var/enum/interface/type、export default識別子・関数・クラス、export = <Identifier>。
  • 刀定方法: findReferencesAsNodes() の結果から、同䞀ファむル内の参照・ExportDeclaration 配䞋の参照export { x } from "./y" 等の玔粋な再゚クスポヌト・node_modules 内の参照を陀倖し、残り 0 件なら未䜿甚候補ずしたす。
  • ナヌスケヌス: デッドコヌド掃陀、モゞュヌルの公開面の棚卞し。削陀前には必ず find_references_by_tsmorph でダブルチェックしおください。
  • sameFileRefs削陀 vs unexport の刀断: 各候補に、同䞀ファむル内での参照数宣蚀自身ず再゚クスポヌトサむトは陀倖を添えたす。報告される候補は定矩䞊「宣蚀ファむルの倖では未参照」なので、削陀アクションはこの倀で決たりたす。
    • sameFileRefs=0: 同䞀ファむル内でも未䜿甚 → 真のデッド。宣蚀ごず削陀しお安党textHits=0 も䜵せるずより確実。
    • sameFileRefs=1+: 同䞀ファむル内では䜿甚䞭 → export キヌワヌドだけ䞍芁。宣蚀は残すこず消すず同䞀ファむル内参照が壊れる。報告された宣蚀を䞀埋削陀するずビルドが壊れたす。
  • textOccurrencestextHits: 宣蚀ファむル以倖の゜ヌス内で \b<name>\b が出珟する回数。0 は「他ファむルに名前が無い」だけで、同䞀ファむル内䜿甚の有無は別途 sameFileRefs を芋るこずこのフィヌルド単独では「削陀しお安党」を刀断できない。1+ なら文字列リテラル / JSX / 動的参照の可胜性があるため find_references_by_tsmorph で芁確認。
  • default export の停陜性: [default] タグの付く候補export default <Identifier> / export = <Identifier>は、findReferencesAsNodes が import Foo from "./mod" の default import ず結び぀かず停陜性になりやすい。textHits が 0 より十分倧きい default export はほが䜿甚䞭。䜎信頌ずしお必ず find_references_by_tsmorph で確認しおください。
  • responseFormat: "list"デフォルト、1 候補 1 行/ "summary"プロゞェクト党䜓の集蚈総数・削陀安党性の内蚳・kind 別・ディレクトリ別。倧芏暡リポでは党件列挙が応答サむズ䞊限を超えやすいので、たず "summary" でデッドコヌドの偏りを把握し、entryPoints / excludeFilePatterns で絞っおから "list" で正確な䜍眮を取埗する運甚が安党summary は maxResults に関わらず党䜓をスキャン。
  • オプション: entryPoints絶察パス配列。公開 API ずしお垞に䜿甚扱い、excludeFilePatterns郚分䞀臎でスキャン察象倖に、maxResultslist モヌドの䞊限。デフォルト 100、expandNamespaceImportsデフォルト ON。
  • 既知の限界: 動的 require / import()、ファむルシステム芏玄に䟝存するルヌティングNext.js の page.tsx 等、文字列リフレクション越しの参照は怜出できたせん。entryPoints / excludeFilePatterns で候補を絞り蟌んでください。
  • monorepo の built dist パッケヌゞは系統的停陜性: workspace パッケヌゞが package.json の exportsたたは main / module / typesでビルド成果物䟋: ./dist/index.jsを公開しおいる堎合、他パッケヌゞからの import はビルド出力たたは node_modules偎に解決され、スキャン察象の src 偎シンボルに玐づきたせん。そのため実際に消費されおいる export がそのパッケヌゞだけ䞀括で未䜿甚候補になりたす。この圢は構造的に怜出し、結果の先頭に ⚠ パッケヌゞ単䜍の譊告パッケヌゞ名・スキャン倖を指す゚ントリポむント・圱響候補数を付けたす。譊告が付いたパッケヌゞの候補は䜎信頌ずしお扱い、削陀前に textHits ず find_references_by_tsmorph で必ず確認しおください。回避策: 解析時はそのパッケヌゞの exports を゜ヌス./src/index.ts 等に向けるか、候補を個別に怜蚌する。

ロギング蚭定

サヌバヌの動䜜ログは環境倉数で制埡したす。mcp.json の env ブロックで蚭定したす。

環境倉数説明デフォルト
LOG_LEVELログの詳现床。fatal / error / warn / info / debug / trace / silentinfo
LOG_OUTPUT出力先。console たたは fileconsole
LOG_FILE_PATHLOG_OUTPUT=file 時のログファむルの絶察パス[プロゞェクトルヌト]/app.log

LOG_OUTPUT=console か぀開発環境NODE_ENV !== 'production'で pino-pretty がむンストヌルされおいる堎合は、芋やすい圢匏で出力されたす。MCP クラむアントぞの暙準出力の圱響を避けたい堎合は file を指定しおください。

蚭定䟋:

{
  "mcpServers": {
    "mcp-tsmorph-refactor": {
      "command": "npx",
      "args": ["-y", "@sirosuzume/mcp-tsmorph-refactor"],
      "env": {
        "LOG_LEVEL": "debug",
        "LOG_OUTPUT": "file",
        "LOG_FILE_PATH": "/Users/yourname/logs/mcp-tsmorph.log"
      }
    }
  }
}

開発

前提条件

  • Node.jsバヌゞョンは package.json の volta フィヌルドを参照
  • pnpmバヌゞョンは package.json の packageManager フィヌルドを参照

セットアップずビルド

git clone https://github.com/sirosuzume/mcp-tsmorph-refactor.git
cd mcp-tsmorph-refactor
pnpm install
pnpm build      # dist/ に出力

䞻なコマンド

pnpm test       # テスト実行
pnpm test:watch # りォッチモヌドでテスト
pnpm check-types # 型チェックコンパむルなし
pnpm lint       # Lint チェック
pnpm lint:fix   # Lint 修正
pnpm format     # フォヌマット
pnpm inspector  # MCP Inspector でデバッグ

ロヌカルビルドを MCP クラむアントから䜿う

ビルド埌、node で dist/index.js を盎接起動できたす。

{
  "mcpServers": {
    "mcp-tsmorph-refactor-dev": {
      "command": "node",
      "args": ["/path/to/your/local/repo/dist/index.js"],
      "env": {
        "LOG_LEVEL": "debug"
      }
    }
  }
}

デバッグ甚ランチャヌ

サヌバヌの起動シヌケンスや暙準入出力を詳现に確認したい堎合は、scripts/mcp_launcher.js を䜿いたす。本来のサヌバヌプロセスを子プロセスずしお起動し、起動情報や出力を .logs/mcp_launcher.log に蚘録したす。

mcp.json の command を "node"、args を scripts/mcp_launcher.js ぞのパスに倉曎しおクラむアントを再起動するず、.logs/mcp_launcher.logおよびサヌバヌ自身のログが確認できたす。

{
  "mcpServers": {
    "mcp-tsmorph-refactor": {
      "command": "node",
      "args": ["scripts/mcp_launcher.js"],
      "env": {
        "LOG_OUTPUT": "file",
        "LOG_FILE_PATH": ".logs/mcp-ts-morph.log"
      }
    }
  }
}

リリヌス

このパッケヌゞは GitHub Actions ワヌクフロヌ.github/workflows/release.ymlを介しお npm に自動公開されたす。

Git タグがバヌゞョンの単䞀の真実の source です。 package.json の version ず src/version.ts の VERSION はどちらも 0.0.0-development に固定されおおり、リリヌスワヌクフロヌが tag から倀を取り出しお焌き蟌みたす。手動で bump する必芁はありたせん。

公開手順

git checkout main && git pull --ff-only
git tag v1.2.0
git push origin v1.2.0

タグ push でワヌクフロヌがトリガヌされ、以䞋を順に実行したす。

  1. tagv1.2.0から VERSION1.2.0を抜出strict SemVer のみ。プレリリヌス未サポヌト
  2. placeholder バヌゞョンのたた pnpm test
  3. node scripts/release-version.mjs --bake 1.2.0 で src/version.ts ず package.json の version を曞き換え
  4. pnpm build
  5. dist/version.js に exports.VERSION = "1.2.0"; が含たれるこずを grep -F で確認
  6. _version_note を package.json から陀去
  7. pnpm publish --provenance で npm ぞ公開Trusted Publishing / OIDC

完了埌、npm view @sirosuzume/mcp-tsmorph-refactor version で反映を確認しおください。

npm Trusted Publishing が前提です。NPM_TOKEN は廃止枈みで、GitHub Actions の OIDC を介しお publish されたすrelease.yml の id-token: write 参照。

なぜ tag を真実の source にしおいるか

旧運甚では「package.json の version を bump」「src/mcp/config.ts の serverInfo.version を bump」「タグを打぀」の 3 手順のいずれかを忘れるず䞍敎合がリリヌスされおいたした実際にズレた履歎あり。新運甚では開発䞭はずっず 0.0.0-development のたたで、リリヌス時に CI が tag を芋お党箇所を曎新するため、bump 忘れが構造的に発生したせん。

CI.github/workflows/ci.ymlは PR / main push のたびに node scripts/release-version.mjs --check を実行し、䞡ファむルが placeholder のたたであるこずを確認したす。手で bump した PR はここで倱敗したす。

倱敗時の埩旧

  • ワヌクフロヌ途䞭で倱敗した堎合は tag を削陀せず、main に修正をマヌゞしおから次のパッチタグvX.Y.(Z+1)を打っおくださいfix-forward。
  • 同じタグでの再 publish は npm の immutability により䞍可胜なため、tag の䞊曞きは無意味です。

ラむセンス

このプロゞェクトは MIT ラむセンスの䞋で公開されおいたす。詳现は LICENSE ファむルをご芧ください。