MCP-server
Finch kan fungeren als een Model Context Protocol (MCP)-server, waardoor AI-tools zoals Claude en Copilot met je applicatie kunnen communiceren.
Installatie
1. Maak een McpServerController aan
import 'package:finch/mcp.dart';
class AppMcpController extends McpServerController {
@override
McpBuilder build(McpBuilder mcp) {
return mcp
.tool(
name: 'get_user',
description: 'Gebruikersinformatie ophalen via ID',
inputSchema: {
'type': 'object',
'properties': {
'id': {'type': 'integer', 'description': 'Gebruikers-ID'},
},
'required': ['id'],
},
handler: (params) async {
var id = params['id'] as int;
var user = await UserModel().findById(id);
return {'user': user?.toJson()};
},
)
.resource(
uri: 'app://config',
name: 'App-configuratie',
description: 'Huidige applicatieconfiguratie',
handler: () async => {
'version': '1.0.0',
'env': FinchApp.config.env,
},
);
}
}
2. Route registreren
router.mcp('/mcp', AppMcpController());
McpBuilder-methoden
| Methode | Beschrijving |
|---|---|
.tool(name, description, inputSchema, handler) |
Een aanroepbaar hulpmiddel definiëren |
.resource(uri, name, description, handler) |
Een leesbare resource definiëren |
.prompt(name, description, handler) |
Een promptsjabloon definiëren |
Ingebouwde JSON-RPC-methoden
| Methode | Beschrijving |
|---|---|
initialize |
Eerste handshake met MCP-client |
tools/list |
Alle beschikbare tools weergeven |
tools/call |
Een tool aanroepen met parameters |
resources/list |
Alle beschikbare resources weergeven |
resources/read |
Een resource lezen |
prompts/list |
Alle prompts weergeven |
prompts/get |
Een prompt ophalen |
Authenticatie
Gebruik AuthMiddleware om het MCP-eindpunt te beveiligen:
router
.mcp('/mcp', AppMcpController())
.middleware(ApiKeyMiddleware());
class ApiKeyMiddleware extends Middleware {
@override
Future<MiddlewareResult> handle(FinchRequest rq) async {
var key = rq.headers['x-api-key']?.first ?? '';
if (key != FinchApp.config.env['MCP_API_KEY']) {
return MiddlewareResult.stop(
rq.renderData(data: {'error': 'Unauthorized'}, statusCode: 401),
);
}
return MiddlewareResult.next();
}
}