Skip to main content
Glama
Alvi97

angular-signal-forms-migration-mcp

by Alvi97

angular-signal-forms-migration-mcp

npm node license

AIコーディングエージェントが、Angular Reactive Forms から Angular Signal Forms への移行を支援するMCPサーバーです。

コードベース内の Reactive Forms 構文を検出し、安全な機械的リネームと、人間の判断が必要なものとを仕分けし、記憶頼みではなく実際のAngularリリースに対して検証済みの before→after レシピを返します。

インストール

Node.js 20+ が必要です。クローンするものはありません — npx が必要に応じて取得します。

claude mcp add signal-forms-migration -- npx -y angular-signal-forms-migration-mcp@latest

または、任意のMCPクライアント設定に追加します:

{
  "mcpServers": {
    "signal-forms-migration": {
      "command": "npx",
      "args": ["-y", "angular-signal-forms-migration-mcp@latest"]
    }
  }
}

@latest を指定すると npx が起動のたびに再解決するため、エディタを再起動するだけで新しいリリースが取り込まれます。指定しない場合、npx は最初にキャッシュしたバージョンを配信し続けます — 設定を @latest に変更するか、npm cache clean --force でキャッシュをクリアしてください。

サーバーは1日1回新しいバージョンを確認し、stderr に1行の通知を書き込みます。これはスロットルされ、2秒でタイムアウトし、stdout には一切触れず、失敗時は何も出力しません。無効にするには、上記の設定ブロックに "env": { "SIGNAL_FORMS_MCP_NO_UPDATE_CHECK": "1" } を追加してください。実際に何が起動しているかを確認するには:

npx angular-signal-forms-migration-mcp@latest --version

[!IMPORTANT] これを Angular アプリに npm install しないでください。 これはエディタが起動する独立したプロセスであり、プロジェクトが依存するライブラリではありません。npx はプロジェクト外のキャッシュに保持します。

[!NOTE] 検出と助言を行いますが、コードを編集するツールは一切ありません。 ソースファイルに書き込むツールは今もなく、今後も作る予定はない。サーバーは検出結果とレシピを返します。変更を決めて編集するのはあなた側のエージェントです。したがって、すべての変更は通常のレビューとバージョン管理を経ることになります。

Related MCP server: VA Form Generation MCP Server

見た目

> Migrate the forms in src/app/checkout to Signal Forms.

  1. find_form_candidates { path: ".../src/app/checkout" }
     → 9 findings across 2 files: 6 mechanical, 3 judgment
       (the FormArray of line items is judgment — its shape changes)
  2. get_signalforms_recipe { construct: "FormBuilder.group" }
     → before/after + caveats
  3. the agent applies the edits, you review the diff
  4. verify_migration { path: ".../checkout.component.ts" }
     → traps that compile and are still wrong

助言の前にチェックする前提条件

移行レポートは、移行を不可能にする条件を最初に示します。実行してない計画よりは無いほうがましというわけだ。

  1. Angular 21+。 @angular/forms/signals は v21 より前には存在しません。v21 未満の場合、サーバーは移行プランではなくアップグレードプランを返します。

  2. 宣言バージョンとインストール済みバージョンが一致している。 古いブランチを新しい node_modules の上にチェックアウトすると、v21 の境目をまたいでしまいます。インストールされている実物に対して移行すると、次の npm ci で目標 API のないバージョンに戻されます。だからサーバーへ は其方に偏らないことを明言します。

  3. moduleResolution がエクスポート対応の bundler、 node16、または nodenext である。 @angular/forms/signals は package import のサブパスです。従来の node 解決方式ではそれを見つけることができず、インポートは依存性がないというようなエラーになります。

ツール

ツール

答え

find_form_candidates

Reactive Forms の構文はどれか、人間の判断が必要なものはあるか?

get_signalforms_recipe

このコンストラクタの検証済み before→after は?

analyze_migration_complexity

この作業はどれだけ大きく、どのファイルから始めればよいか。

get_migration_report

全体をひとつのマークダウン文書として出してください。

verify_migration

すでに移行したが、コンパイルは通ってもまだ正しくないものは?.

get_angular_upgrade_plan

v21 未満だ。どうすればこれをサポートするバージョンに到達できるか。

詳細なパラメータ、レスポンス の形式、スコープの制限は、docs/TOOLS.md にあります。

レシピの検証方法

Signal Forms は新しく、モデルのトレーニングデータに確実には含まれていません — 記憶から書くレシピは「正しく見える形で間違う」ので、それらはどれもこうは。

レシピは公式の Angular CLI MCP サーバーを使って Angular v22 で検証し、再検証は angular.dev と照合し、構造化された由来情報(verifiedAgainstVersion、 retrievedISO、 sources) を管理し、それをツールのレスポンスに同梱しているので、あなたのエージェントがアドバイスの最新度を判断できます。sources リストが空のレシピは CI が失敗します。

ドキュメントが答えを出していない場合、レシピは答えを捏造せずに caveats(注意書き) にそう書きます — UNVERIFIED — confirm on <url>、または UNVERIFIED、 tool-auth или guidance の形式で。Angularがあまりにも移行パスを文書化していない場合です(RxJS ストリーム層が主な例です。プリミティブはドキュメントされ コンパイルもできますが、その両方を選ぶのはAngularの判断ではなく、このツールの判断です)。現在 37本のうち14本 のレシピにそのマーカーがあります。それは意図した正直な部分であり、見落としではありません。そしてテストがこの数値を正しいまま保っています。

レシピは実際にコンパイルされています CI は実物の @angular/forms@22 をインストールして、レシピが使うすべてのAPIを実行するフィクスチャの型チェックをします。存在しない関数を名前や引数の形(酸形)としてレシピを書くとビルドが落ちます。そこで disabled(path, { when }) が v22 シグニチャであると確立しました。ドキュメントはこのシグニチャも、ネストした schema() + apply() の合成も説明していません。

この過程で記憶が誤っているのを2つ見つけました:

  • バイビニングディレクティブは [formField] / FormField であり — [control] / Control ではない。あるいは v21 プレリリース資料に登場して、モデルはこちらの方を再現します。

  • disabled() / hidden() は v22 でオプションオブジェクト形式を持て、裸のコールバックを削除するのではなく @deprecated とマークしました。したがって v21 流のほールは警告付きでコンパイルできる。これはドキュメントではなく配布されたオーバーロードの diff から確認した事実です。

バージョンによって振る舞いが変わるレシピには VERSION-SENSITIVE の注意書きがあり、バージョンごとの形を列挙したうえで、サーバーはプロジェクトの検出バージョンに対応して解決します。caveatsと配列を読みましょう — 危ない箇所はそこにあります。

新しいAngularリリースに対する再検証手順は、REVERIFICATION.md にあります。

クリーンな答えがないときはそれを伝えます

すべての Reactive Forms パターンが Signal Forms に相当するとは限りません。逆にそう言う移行ツールはないまま以上に有害である。フォームストリームは .pipe() チェーンに渡る RxJS オペレーターに応じて以下のよう:

層

オペレーター

回答

trivial

なし / 裸の subscribe

computed() か、本当の副作用には effect()

moderate

map, filter, debounceTime, distinctUntilChanged, …

computed() + スキーマの debounce() ルール

hard

switchMap, combineLatest, withLatestFrom, forkJoin, …

直接に相当するものがありません

hard 層のレシピは、その場そのまま伝えますが、実用的な3つの戦略 — バリバリ非同期バリデーション、rxResource、または RxJS を not Observable プレースするのではなく toObservable / toSignal の後ろに保つ — を提示し、存在しない自動一行変換ね発明しません。

同様に、addControl() / removeControl() には相当するものは一切ありません。フィールドツリーはモデルシグナルの型から派生するためです。実在するこんな API を暗黙にいうことをせず、実際の3つの答えをレシピは説明しています。

しないこと

  • ファイルを編集しません。 設計として恒久的に。

  • 移行が正しいことを証明しません。 verify_migration の意味は「既知の欠陥がない」の証明です。tsc の後、ではなく必ず tsc の後に動かしてください。

  • テンプレート駆動フォームは移行しません。 ngModel の移行は上流でドキュメント化されていません。それを推測するのは、このプロジェクトが回避するために存在する 失敗の形そのものです。

  • ${...} を含むテンプレートリテラルを読みません。 は、テキストがそれ Angular コンパイラはスキャン対象ではありません。補間を含まないインラインの template: 文字列はスキャンします。

  • CSS/SCSS をスキャンしません。 ファイルをまたいだ型判定もしません — 検出はシングルファイルの構文パスであり、ts.Program ではありません。

以上のは ROADMAP.md で追跡しています。移行レポートでは、count の数字だけが完全性をほのめかさないよう、独自の「Scope」の章でもこれを繰り返します。

なぜ公式 Angular MCP server だけではないのか?

両方使いましょう。公式の @angular/cli MCP サーバーはAngularを知っています。こえは移行を知っています — コード内にどのような構造があるか、どれが機械的で、どれに決定が必要か、検証済みの置換はどのようなものか。あなたのエージェントはここで検出結果とレシピを持ち帰り、編集前に該当の情報またはプロジェクト固有のものをそこで確認することができます。

ステータス

M16 まで機能完全。6つのツールが提供されています。ドキュメントに検証されたレシピは、基本コンストラクション、配列、実行時の形状変化、非同期カスタム、カスタムコントロール、RxJS ストリームの3階層、フォーム状態の読み書き、送信、モデル形状の制約、CSSclass、テストファイル移行、.html テンプレート層(=バインド、状態読み取り、<select multiple> というブロッカー、警告のないエラキー リネーム)までをカバー。

トランスポートは stdio なので、stdout はプロトコル用に予約、ログはすべて stderr に出ます。

コントリビュートや環境開発: CONTRIBUTING.md。

ライセンス

MIT

Available Tools

6 tools
analyze_migration_complexitySummarise the size and shape of a Signal Forms migrationA
Read-only

Scans .ts and .html files (or a directory) and summarises the migration: total findings, counts per construct, the mechanical/judgment split, and a suggested file order (simplest first, so all-mechanical files land before the ones needing design decisions). Read-only: this tool never modifies your files.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute path to a .ts file or a directory to scan recursively.

Output Schema

ParametersJSON Schema
NameRequiredDescription
byConstructYes
judgmentCountYes
totalFindingsYes
angularVersionYes
suggestedOrderYes
mechanicalCountYes
referenceOnlyFilesYes
blockingPrerequisiteYes
sharedValidatorFilesYes
signalFormsAvailableYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and destructiveHint=false, so the behavior is largely covered structurally. The description reinforces the read-only guarantee and adds context about scanning behavior and result structure, but it does not disclose edge cases such as invalid paths or recursion behavior beyond what is already implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence states the input and output details directly, and the second provides a clear read-only safety note. There is no fluff, redundancy, or unnecessary beat-around-the-bush phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has one required parameter, a simple input schema, output schema coverage, and clear annotations. The description supplies all the essential operational context: file types scanned, summarization outputs, file ordering rationale, and the mutation safety guarantee. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the single path parameter with 100% coverage. The description further clarifies that the tool scans .ts and .html files, and notes the directory alternative, adding practical meaning beyond the schema. There is slight ambiguity about whether a standalone .html file path is accepted, but overall the description usefully extends the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: it scans .ts and .html files or a directory and summarises the migration. It also enumerates concrete outputs such as total findings, per-construct counts, and the mechanical/judgment split, which clearly distinguishes it from siblings like verify_migration or get_migration_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does and what it returns, but it does not explicitly state when to prefer this tool over siblings such as find_form_candidates or get_angular_upgrade_plan. It does not provide exclusions or an explicit when-to-use/when-not-to-use scenario, leaving usage mostly implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_form_candidatesFind Angular Reactive Forms migration candidatesA
Read-only

Scans .ts and .html files (or a directory) for Angular Reactive Forms constructs and classifies each finding as "mechanical" (safe to transliterate) or "judgment" (a human must decide the target design). Read-only: this tool never modifies your files. Results are PAGED (default 200 findings) — check incomplete: non-null means there is more, and says how to get it. Filter with constructs / classification to work one decision at a time.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute path to a .ts file or a directory to scan recursively.
limitNoMaximum findings to return. Defaults to 200. A whole workspace can be far larger than one context window, so the response is a window and says so when it is.
offsetNoIndex of the first finding to return. Defaults to 0. Page with page.nextOffset.
constructsNoReturn only these construct names (e.g. ["FormArray.push"]). Use it to pull one decision at a time. Filtering is announced in `incomplete`.
classificationNoReturn only "mechanical" or only "judgment" findings.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageYes
filesYes
incompleteYesNon-null when this response is NOT the full result, with the call that returns the rest. Null means complete. Never treat a filtered or paged list as the whole job.
totalFindingsYesFindings in the whole scan, unfiltered.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite readOnlyHint being true, the description goes well beyond that by explicitly stating the tool never modifies files, results are paged, the default page size, and what `incomplete` means. It also communicates the mechanical/judgment classification logic, which is valuable beyond the annotations. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences each carry distinct value: scanning scope, read-only guarantee, paging, and filter guidance. The most important details are front-loaded and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a read-only scanning utility, and the description covers all relevant operational aspects: input scope, safety, classification semantics, paging, and filtering. The presence of an output schema further covers return details, so no necessary information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents all parameters at 100% coverage, so the baseline is high. The description adds value by framing constructs/classification as a 'work one decision at a time' workflow and by highlighting paging constraints in the overall behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation (scans .ts and .html files or a directory), the object (Angular Reactive Forms constructs), and the output distinction (mechanical vs. judgment). This differentiates it from sibling tools like analyze_migration_complexity or get_migration_report, which focus on broader analysis or reporting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly describes path-based scanning, result filtering, and pagination workflow, saying to check `incomplete` for more results. It does not explicitly say when NOT to use this tool in favor of a sibling, but the operational guidance for how to use this tool is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_angular_upgrade_planPlan the Angular upgrade that Signal Forms requiresA
Read-only

Signal Forms needs Angular 21+. When a project is older, this returns the upgrade plan as markdown, reproducing angular.dev/update-guide from Angular's own published step data — not written by this server. The current version is detected from the project; you choose application complexity (1 Basic, 2 Medium, 3 Advanced) and whether you use ngUpgrade, Angular Material or Windows, exactly as the official guide asks. Read-only: this tool never modifies your files.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute path inside the Angular project. The current version is read from its package.json.
levelNoApplication complexity, as on angular.dev/update-guide: 1 Basic, 2 Medium, 3 Advanced. Defaults to 3.
toMajorNoTarget major. Defaults to the version the recipes are verified against.
windowsNo"I use Windows." Swaps in cmd-compatible commands.
materialNo"I use Angular Material."
fromMajorNoOverride the detected current major version.
ngUpgradeNo"I use ngUpgrade to combine AngularJS & Angular."

Output Schema

ParametersJSON Schema
NameRequiredDescription
markdownYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Read-only: this tool never modifies your files.' It adds meaningful context beyond the annotations: the plan is reproduced from Angular's published step data (not written by this server), the output is markdown, and the current version is auto-detected from the project with optional overrides. It just does not cover edge cases such as what happens when the project is already above the required version.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the purpose and the trigger condition ('When a project is older, this returns the upgrade plan'). Each sentence pulls its weight: requirement, result/format/source, input choices matching the official guide, and the read-only guarantee. It is a touch dense but there is no dead weight and no repetition of the raw schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with full parameter descriptions, an output schema, and explicit read-only annotations, this description covers nearly everything: why it exists (Signal Forms needs 21+), when to call it (older projects), what comes back (official markdown plan), and which input choices to make (the official questionnaire parameters). Minor gaps remain, such as expected behavior when the project is already current or how the detected version is resolved from package.json, but these are edge cases, not blocking gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so each parameter already has a description, defaults, and constraints in the input schema. The description adds only slight glue (the choices are exactly what the official guide asks, the version is detected from the project), which is helpful but not a substantial extension of the schema. Baseline 3 is appropriate here; a higher score would require the description to clarify meanings the schema left unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete deliverable — 'the upgrade plan as markdown' reproducing angular.dev/update-guide from Angular's published step data — and anchors it to a requirement (Signal Forms needs Angular 21+). It clearly distinguishes this tool from siblings like analyze_migration_complexity and get_migration_report, which are about analysis and reporting rather than the official step-by-step upgrade plan. The verb (returns) and the resource (the Angular plan from the official guide) are precise.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear trigger condition: use it when a project is older than Angular 21+ so the tool emits the official upgrade plan. It also helps the agent select the right parameters by telling it to choose complexity and options 'exactly as the official guide asks.' It does not explicitly name the siblings as alternatives or say when not to use it, which keeps it below 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_migration_reportGenerate a Signal Forms migration reportA
Read-only

Scans .ts and .html files (or a directory) and returns a MARKDOWN REPORT combining findings, complexity, a suggested file order, the constructs present with their recipe names, and a warning for any version-sensitive recipe involved. Returns the report as a string — it does NOT write a file; you decide whether to save it. Read-only: this tool never modifies your files.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute path to a .ts file or a directory to scan recursively.

Output Schema

ParametersJSON Schema
NameRequiredDescription
markdownYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description clearly discloses that the tool is read-only and does not write files, which aligns with and adds context beyond the readOnlyHint annotation. It also explains that the report is returned as a string and that saving it is the caller's decision, which is useful behavioral guidance for an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is reasonably concise and front-loaded with the core action. It packs useful details into three sentences, but it has some redundancy: 'it does NOT write a file', 'you decide whether to save it', and 'this tool never modifies your files' all express similar read-only/no-file-write behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a read-only reporting tool of this complexity. It names the input scope, the output format, the report contents, and the file-writing behavior. Since an output schema exists and annotations cover read-only behavior, nothing critical is missing for an agent to decide whether to call this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents the `path` parameter as an absolute path to a .ts file or directory. The description adds context by mentioning .html files and directories, but it does not materially expand the parameter semantics beyond what the schema describes. With 100% schema coverage, a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies what the tool does: it scans .ts and .html files or a directory and returns a Markdown report with specific content (findings, complexity, file order, recipe names, version warnings). It distinguishes the tool from generic utility tools by naming the report contents, though it stops short of explicitly contrasting itself with the sibling analysis tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when you need a combined migration report as a string rather than a file. It does not explicitly state when not to use it or which sibling tool should be used instead, such as `analyze_migration_complexity` for complexity-only analysis or `verify_migration` for validation afterward.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_signalforms_recipeGet an Angular Signal Forms migration recipeA
Read-only

Returns a verified before/after migration recipe for a single Reactive Forms construct (e.g. "FormControl", "FormBuilder.group", "Validators.required"). An unknown construct returns found:false plus the list of available constructs — it is never an error. Read-only: this tool never modifies your files.

ParametersJSON Schema
NameRequiredDescriptionDefault
constructYesReactive Forms construct to look up, e.g. "FormControl", "FormBuilder.group", "Validators.required".

Output Schema

ParametersJSON Schema
NameRequiredDescription
afterNo
foundYes
beforeNo
caveatsNo
constructYes
provenanceNo
descriptionNo
availableConstructsNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Read-only: this tool never modifies your files.' Beyond that, it adds a valuable behavioral edge case: unknown constructs return found:false plus available constructs and are never an error, which is more informative than standard error expectations. This exceeds the baseline set by the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero waste. The core behavior is front-loaded, followed by the edge case and a read-only guarantee. Every sentence earns its place, and no irrelevant information is included.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple one-parameter lookup tool with a known input shape and an output schema. The description covers behavior, unknown-input handling, and side-effect safety, so an agent has everything needed to invoke it correctly. The output schema handles the return-value details, and the description covers the rest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameter is already well documented. The description's examples ('FormControl', 'FormBuilder.group', 'Validators.required') mirror the schema's own examples and do not add new semantic depth. The description adds only a mild connection between the parameter and the resulting recipe concept, which keeps this at the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb+resource: 'Returns a verified before/after migration recipe for a single Reactive Forms construct.' It also gives concrete examples ('FormControl', 'FormBuilder.group', 'Validators.required') and distinguishes itself from sibling tools by targeting a single construct lookup rather than scanning, analysis, or reporting. This makes it unambiguous which tool an agent should select.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the use case: looking up a recipe for a specific Reactive Forms construct. It doesn't explicitly name alternative tools, but the examples and single-construct scope make it evident as a lookup tool. However, it does not explicitly state when to prefer a sibling like find_form_candidates or verify_migration instead, leaving a small gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_migrationVerify an already-migrated Signal Forms fileA
Read-only

Reads code you have ALREADY migrated and reports Signal Forms traps that COMPILE and are still wrong — a missed signal call in a position TypeScript does not check, a deprecated-but-valid v21 rule shape, a pre-release API name, an AbstractControl left in a form() model, Reactive Forms imports left behind. Run it after tsc, not instead of it: anything the compiler already reports is deliberately not repeated here. Read-only. It proves the ABSENCE OF KNOWN DEFECTS, never correctness.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute path to an ALREADY-MIGRATED .ts file, or a directory to scan.

Output Schema

ParametersJSON Schema
NameRequiredDescription
filesYes
checksRunYes
infoCountYes
disclaimerYes
errorCountYes
warningCountYes
checksSkippedYes
notMigratedFilesYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, which already mark read-only and non-destructive behavior, the description adds important behavioral nuances: it only reports defects the compiler misses, it does not re-report compiler errors, and its results 'prove the ABSENCE OF KNOWN DEFECTS, never correctness.' This is exactly the kind of limitation disclosure that helps the agent set expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but stays efficient: it front-loads the tool's core behavior, lists useful defect categories, states the run order relative to tsc, and closes with an epistemically honest caveat. Every sentence contributes meaningful decision-making information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only verifier with a 100%-documented schema and an output schema present, the description covers what the tool reads, what defects it finds, where it fits in the workflow, what it explicitly does not do, and its limits. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers the only parameter with 100% accuracy, including that the path must point to an already-migrated file or directory. The description reinforces this with 'reads code you have ALREADY migrated,' but it does not need to add parameter-level detail beyond what the schema already supplies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific verb+resource: it reads already-migrated code and reports Signal Forms traps that compile but are still wrong. It gives concrete examples and establishes that its scope is intentionally narrower than 'correctness checking,' making it distinguishable from migration-planning and reporting siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit usage boundary: 'Run it after tsc, not instead of it.' It also states that compiler-reported errors are deliberately excluded, so an agent knows when the tool is and is not the right choice in a migration workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.9.1
    • First observedanalyze_migration_complexity
    • First observedfind_form_candidates
    • First observedget_angular_upgrade_plan
    • First observedget_migration_report
    • First observedget_signalforms_recipe
    • First observedverify_migration

TDQS

A4.3/5.0

Scored across 6 tools

Disambiguation4/5

Most tools are clearly distinct in purpose: discovery, complexity analysis, report generation, recipe lookup, upgrade planning, and verification. The only potential overlap is between find_form_candidates, analyze_migration_complexity, and get_migration_report, but their distinct output shape (raw findings vs. summary vs. combined report) keeps them distinguishable.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern: get_*, find_*, analyze_*, verify_*. The verbs and nouns are explicit and predictable, so an agent can infer tool behavior from the name.

Tool Count5/5

Six tools is well-scoped for a migration-assist server. Each tool covers a necessary part of the migration workflow—candidate discovery, recipe lookup, complexity analysis, report generation, upgrade planning, and post-migration verification—without redundancy or bloat.

Completeness4/5

The tool surface covers the full lifecycle of the migration assistance: analyzing the existing code, obtaining recipes, generating reports, planning version upgrades, and verifying the migrated result. It lacks a tool that applies the migration automatically, but the server explicitly positions itself as read-only and focuses on verification rather than execution.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables LLMs to apply Martin Fowler's 71+ refactoring patterns to codebases through a pluggable, language-agnostic architecture. Supports previewing and applying refactorings, analyzing code smells, and inspecting code structure with safe-by-default operations.
    5
    29 PyPI
    5
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Provides tools for auditing and fixing scaffolded VA forms to ensure they follow best practices and VA.gov content standards. Enables automated validation, agent prompt generation, and orchestration of form fixes across any vets-website workspace.
    5
    1
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables AI agents to safely upgrade JavaScript and TypeScript projects through dependency analysis, upgrade path detection, breaking change identification, codemod application, and PR summary generation.
    14
    8 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides symbol-level dependency analysis and LLM-ready migration prompts for TypeScript/JavaScript projects, enabling AI editors to scan projects, analyze packages, and generate refactoring prompts.
    21 npm
    19
    MIT