dew/packages/mcp/test/mcp_test.dart
Chris Hendrickson a74bd94547 Implement MCP tool registry and kanban tool provider
- 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>
2026-04-23 15:29:46 -04:00

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));
});
});
}