MCP Fusion/Get started/Quickstart
Quickstart
Build a first connector with MCP Fusion: one query tool, one Presenter with PII redaction, a connection from Claude Desktop and a free deploy to Vinkius Cloud.
This quickstart builds a small billing connector: one tool that returns an invoice, a Presenter that keeps customer PII out of the model context, a live connection from an MCP client and a free deploy to Vinkius Cloud. It assumes you installed @mcpfusion/core and scaffolded a project as shown in Installation.
1. Create the server
import { initMCPFusion } from '@mcpfusion/core';
const f = initMCPFusion();
export default f;initMCPFusion() returns a registry with the fluent tool builders. The generic parameter AppContext is optional: when you provide a type, every handler and middleware receives a typed ctx.
2. Define a Presenter
import { createPresenter, t } from '@mcpfusion/core';
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 before showing money.',
])
.limit(50);Three things happen here. The schema says exactly which fields exist, so undeclared columns never reach the agent. .redactPII() removes the listed paths on every response. .rules() become system prompt lines that teach the model the units.
3. Write the tool
import { InvoicePresenter } from './presenters';
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 },
});
});f.query() marks the tool as read only. Use f.mutation() for writes and f.action() for anything with side effects. .returns(InvoicePresenter) attaches the perception layer: the handler may return the raw row, the Presenter does the shaping.
Never return PII from a handler that has no Presenter attached. With MCP Fusion the Presenter is the egress firewall; without it, whatever the handler returns goes to the model as is.
4. Connect a client
Start the dev server and connect Claude Desktop, Cursor or any MCP client:
mcpfusion dev --server ./src/server.ts
claude mcp add billing npx tsx src/server.tsAsk the client "what is invoice inv_2026_0417?" and watch the answer come back in dollars, without the customer email anywhere in the transcript.
5. Deploy for free
mcpfusion deployOne command bundles your server and puts it on the Vinkius Edge: free hosting, no credit card. You receive a connection token and an MCP URL such as https://edge.vinkius.com/vk_<token>/mcp. Your connector appears in the Vinkius console like any other connector, with capabilities, credentials and cost controls already wired. See Deploy for the full walkthrough.
What you built
| Piece | Role |
|---|---|
f.query() | A read only tool the agent can call |
createPresenter() | The perception layer between your data and the model |
.redactPII() | The guarantee that PII never reaches the model |
.returns() | The wire between handler and Presenter |
mcpfusion deploy | Free hosting on the Vinkius Edge |
Next steps
- The MVA pattern: why Presenters exist
- Tools: mutations, actions, middleware and errors
- Credentials: let buyers configure their own keys
