registryFromDiscoveredLink function
Registry whose handlers forward to a discovered owner.
Used by intentcall mcp serve --scheme. Calling a tool does not copy the
owner's handler into this process.
Implementation
Future<InMemoryAgentRegistry> registryFromDiscoveredLink(
final AgentLinkAnnouncement announcement,
) async {
final tools = await listAgentWebSocketTools(
uri: Uri.parse(announcement.websocket),
);
final registry = InMemoryAgentRegistry();
for (final tool in tools) {
final name = '${tool['name'] ?? ''}';
if (name.isEmpty) {
continue;
}
final parts = name.split('_');
final namespace = parts.length > 1 ? parts.first : 'app';
final bare = parts.length > 1 ? parts.skip(1).join('_') : name;
final schema = tool['inputSchema'];
registry.register(
RegisteredAgentIntent(
descriptor: AgentIntentDescriptor(
namespace: namespace,
name: bare,
description: '${tool['description'] ?? name}',
kind: AgentIntentKind.tool,
inputSchema: schema is Map
? Map<String, Object?>.from(schema)
: const <String, Object?>{'type': 'object'},
),
execute: (final invocation) => invokeAgentWebSocket(
uri: Uri.parse(announcement.websocket),
envelope: IntentCallInvocationEnvelope(
id: 'mcp-proxy-${DateTime.now().microsecondsSinceEpoch}',
qualifiedName: name,
arguments: invocation.arguments,
source: IntentCallInvocationSource.websocket,
),
),
),
qualifiedNameOverride: name,
);
}
return registry;
}