MCP Fusion/Reference/Migration
Migration
Migrieren Sie einen bestehenden MCP-Server Schritt für Schritt vom rohen SDK zu MCP Fusion: ein Tool-Domain nach dem anderen, von JSON.stringify-Antworten zu Presenters, Redaction und Rules.
MCP Fusion erfordert keine Neuschreibung. Das rohe MCP-SDK und MCP Fusion können in einem Server koexistieren, und die meisten Teams migrieren einen Tool-Domain nach dem anderen, im Bereich von 15 bis 30 Minuten pro Domain. Diese Seite zeigt die Form eines solchen Schritts.
Vorher: ein Tool aus dem rohen SDK
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) }],
};
}
});Die Probleme sind strukturell. JSON.stringify(invoice) schickt jede Spalte an das Modell, auch die, deren Existenz Sie vergessen hatten. Einheiten leben in Stammeswissen, also rät das Modell. Es gibt keinen Ort, an dem Redaction, Validierung oder Next Actions überhaupt stattfinden könnten.
Nachher: dasselbe Tool in MVA
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 } });
});Dieselbe Handler-Logik. Was sich geändert hat:
| Aspekt | Rohes SDK | MCP Fusion |
|---|---|---|
| Ausgabeform | JSON.stringify, alle Spalten | Presenter-Schema, nur deklarierte Felder |
| PII | Auf der Leitung | .redactPII() vor der Serialisierung |
| Einheiten und Bedeutung | Prompt-Folklore | .rules() als Systemzeilen |
| Next Actions | Keine | Affordances von .suggest() |
| Validierung | Manuell | Zod vom Builder |
Der inkrementelle Weg
- Installieren Sie parallel.
npm install @mcpfusion/corestört die bestehenden Handler nicht. - Wählen Sie einen Tool-Domain. Meist den, der die sensibelsten Daten berührt.
- Schreiben Sie zuerst den Presenter. Deklarieren Sie die Felder, die die Aufgabe braucht, wenden Sie Redaction auf den Rest an und schreiben Sie die Rules, die das Modell ständig falsch bekommt.
- Ziehen Sie den Handler um. Die Query-Logik übersteht das meist unverändert.
- Verdrahten Sie
autoDiscover. Neue Tools kommen aussrc/tools/, alte Handler funktionieren während der Umstellung weiter. - Verriegeln und testen. Führen Sie
mcpfusion lockfür die neue Oberfläche aus und ergänzen Sie die Egress-Assertions aus Testing.
Von anderen Frameworks kommend
- Von reinen HTTP-APIs.
@mcpfusion/openapi-generzeugt Models, Views und Agents aus einer bestehenden OpenAPI- oder Swagger-Spec, sodass das Ummanteln einer internen API fast vollständig generiert beginnt. - Von einem Prisma-Schema.
@mcpfusion/prisma-generzeugt Tools und Presenters mit Sicherheit auf Feldebene und Tenant-Isolation aus Schema-Annotationen. - Von n8n.
@mcpfusion/n8nmacht n8n-Webhooks zu Tools mit Tag-Filterung. - Von AWS-Interna.
@mcpfusion/awshebt Lambda-Funktionen und Step Functions über Ressourcen-Tags zu Tools.
Nächste Schritte
- The MVA pattern: wohin die Migration führt
- Models and Presenters: die Ziel-API
- Deploy: wenn die letzte Domain migriert ist, kostenlos ausliefern
