MCP 服务器
Finch 可以作为 Model Context Protocol (MCP) 服务器,允许 Claude、Copilot 等 AI 工具与你的应用程序交互。
设置
1. 创建 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,
},
);
}
}
2. 注册路由
router.mcp('/mcp', AppMcpController());
McpBuilder 方法
| 方法 | 描述 |
|---|---|
.tool(name, description, inputSchema, handler) |
定义可调用的工具 |
.resource(uri, name, description, handler) |
定义可读取的资源 |
.prompt(name, description, handler) |
定义提示模板 |
内置 JSON-RPC 方法
| 方法 | 描述 |
|---|---|
initialize |
与 MCP 客户端的初始握手 |
tools/list |
列出所有可用工具 |
tools/call |
使用参数调用工具 |
resources/list |
列出所有可用资源 |
resources/read |
读取资源 |
prompts/list |
列出所有提示 |
prompts/get |
获取提示 |
认证
使用 AuthMiddleware 保护 MCP 端点:
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();
}
}