MCP Fusion/Reference/移行
移行
既存の MCP サーバーを生の SDK から MCP Fusion へ段階的に移行します。一度に移行するのは 1 つのツールドメイン。JSON.stringify のレスポンスから、Presenter、redaction、rules へ進みます。
MCP Fusion では書き直しは不要です。生の MCP SDK と MCP Fusion は 1 つのサーバー内で共存でき、多くのチームは 1 つのツールドメインずつ、1 ドメインあたり 15 分から 30 分程度で移行していきます。このページでは、その一歩がどのようなものかを示します。
移行前: 生の SDK のツール
typescript
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === 'get_invoice') {
const invoice = await db.invoices.findUnique({
where: { id: request.params.arguments.id },
});
return {
content: [{ type: 'text', text: JSON.stringify(invoice) }],
};
}
});問題は構造的なものです。JSON.stringify(invoice) は、存在を忘れていた列まで含め、すべての列をモデルに送ります。単位は暗黙知の中にあり、モデルは推測するしかありません。redaction、バリデーション、次のアクションが行われる場所すらありません。
移行後: MVA での同じツール
typescript
const InvoicePresenter = createPresenter('Invoice')
.schema({
id: t.string,
customer: t.string,
amount_cents: t.number.describe('CENTS, divide by 100'),
status: t.enum('draft', 'paid', 'overdue'),
})
.redactPII(['customer.email', 'customer.ssn'])
.rules(['amount_cents is in CENTS. Divide by 100.']);
export default f.query('billing.get_invoice')
.describe('Retrieve an invoice by ID')
.withString('id', 'Invoice ID')
.returns(InvoicePresenter)
.handle(async (input) => {
return db.invoices.findUnique({ where: { id: input.id } });
});ハンドラのロジックは同じです。変わった点:
| 関心事 | 生の SDK | MCP Fusion |
|---|---|---|
| 出力の形 | JSON.stringify、全列 | Presenter のスキーマ、宣言されたフィールドのみ |
| PII | 通信路上にそのまま | .redactPII() でシリアライズ前に除去 |
| 単位と意味 | プロンプトの言い伝え | .rules() をシステム行として |
| 次のアクション | なし | .suggest() のアフォーダンス |
| バリデーション | 手動 | ビルダー提供の Zod |
段階的な移行手順
- 並行してインストールします。
npm install @mcpfusion/coreは既存のハンドラに影響しません。 - ツールドメインを 1 つ選びます。 通常は最も機密性の高いデータを扱うものです。
- まず Presenter を書きます。 タスクに必要なフィールドを宣言し、それ以外は redaction し、モデルが間違えがちな点を rules に記します。
- ハンドラを移します。 クエリのロジックは通常そのまま使えます。
autoDiscoverを接続します。 新しいツールはsrc/tools/から供給され、移行中も古いハンドラは動き続けます。- ロックしてテストします。 新しい行面に対して
mcpfusion lockを実行し、Testing の egress アサーションを追加します。
他のフレームワークからの移行
- 素の HTTP API から。
@mcpfusion/openapi-genは既存の OpenAPI や Swagger の仕様から Models、Views、Agents を生成するため、内部 API のラップはほとんど生成された状態で始まります。 - Prisma のスキーマから。
@mcpfusion/prisma-genはスキーマのアノテーションから、フィールド単位のセキュリティとテナント分離を備えたツールと Presenter を生成します。 - n8n から。
@mcpfusion/n8nは n8n の webhook をタグフィルタリング付きのツールに変換します。 - AWS の内部構成から。
@mcpfusion/awsはリソースタグを介して Lambda 関数と Step Functions をツールに引き上げます。
次のステップ
- The MVA pattern: 移行の目的地
- Models and Presenters: 移行先の API
- Deploy: 最後のドメインを移したら、無料で公開しましょう
