MCP Server
فینچ میتواند به عنوان یک سرور Model Context Protocol (MCP) عمل کند، که به ابزارهای هوش مصنوعی مانند Claude و Copilot اجازه میدهد با برنامه شما تعامل داشته باشند.
راهاندازی
۱. یک McpServerController بسازید
import 'package:finch/mcp.dart';
class AppMcpController extends McpServerController {
@override
McpBuilder build(McpBuilder mcp) {
return mcp
.tool(
name: 'get_user',
description: 'دریافت اطلاعات کاربر از طریق ID',
inputSchema: {
'type': 'object',
'properties': {
'id': {'type': 'integer', 'description': '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: 'پیکربندی برنامه',
description: 'پیکربندی فعلی برنامه',
handler: () async => {
'version': '1.0.0',
'env': FinchApp.config.env,
},
);
}
}
۲. Route را ثبت کنید
router.mcp('/mcp', AppMcpController());
متدهای McpBuilder
| متد | توضیح |
|---|---|
.tool(name, description, inputSchema, handler) |
یک tool قابل فراخوانی تعریف کنید |
.resource(uri, name, description, handler) |
یک resource قابل خواندن تعریف کنید |
.prompt(name, description, handler) |
یک template prompt تعریف کنید |
متدهای داخلی JSON-RPC
| متد | توضیح |
|---|---|
initialize |
handshake اولیه با MCP client |
tools/list |
لیست تمام tool های موجود |
tools/call |
فراخوانی یک tool با پارامترها |
resources/list |
لیست تمام resource های موجود |
resources/read |
خواندن یک resource |
prompts/list |
لیست تمام prompt ها |
prompts/get |
دریافت یک prompt |
احراز هویت
برای محافظت از endpoint MCP، از AuthMiddleware استفاده کنید:
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();
}
}