- Add McpTool + McpToolProvider interface to core - Add McpToolRegistry to mcp package (aggregates providers) - Add DewMcpServer (MCPServer + ToolsSupport via dart_mcp 0.5.0) - Add 'mcp serve' subcommand — starts a real stdio MCP server - Implement KanbanToolProvider with 5 tools: kanban_create_ticket, kanban_list_tickets, kanban_get_ticket, kanban_update_ticket, kanban_delete_ticket - Wire McpToolRegistry + KanbanToolProvider in CLI - 26 tests passing, dart analyze clean Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
57 lines
1.6 KiB
Dart
57 lines
1.6 KiB
Dart
import 'package:dew_core/dew_core.dart';
|
|
import 'package:dew_mcp/dew_mcp.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
class _PingProvider implements McpToolProvider {
|
|
@override
|
|
List<McpTool> get tools => [
|
|
McpTool(
|
|
name: 'ping',
|
|
description: 'Returns pong.',
|
|
inputSchema: {'type': 'object', 'properties': {}},
|
|
handler: (_) async => 'pong',
|
|
),
|
|
];
|
|
}
|
|
|
|
void main() {
|
|
group('McpCommand', () {
|
|
test('has correct name and description', () {
|
|
final cmd = McpCommand(McpToolRegistry());
|
|
expect(cmd.name, 'mcp');
|
|
expect(cmd.description, isNotEmpty);
|
|
});
|
|
|
|
test('has serve subcommand', () {
|
|
final cmd = McpCommand(McpToolRegistry());
|
|
expect(cmd.subcommands.keys, contains('serve'));
|
|
});
|
|
|
|
test('registerCommands adds mcp command to registry', () {
|
|
final commandRegistry = CommandRegistry();
|
|
registerCommands(commandRegistry, McpToolRegistry());
|
|
expect(commandRegistry.commands.map((c) => c.name), contains('mcp'));
|
|
});
|
|
});
|
|
|
|
group('McpToolRegistry', () {
|
|
test('starts empty', () {
|
|
expect(McpToolRegistry().allTools, isEmpty);
|
|
});
|
|
|
|
test('register adds provider tools', () {
|
|
final registry = McpToolRegistry();
|
|
registry.register(_PingProvider());
|
|
expect(registry.allTools, hasLength(1));
|
|
expect(registry.allTools.first.name, 'ping');
|
|
});
|
|
|
|
test('aggregates tools from multiple providers', () {
|
|
final registry = McpToolRegistry();
|
|
registry.register(_PingProvider());
|
|
registry.register(_PingProvider());
|
|
expect(registry.allTools, hasLength(2));
|
|
});
|
|
});
|
|
}
|
|
|