Skip to content

Registry

Bases: Registry

A ToolRegistry manages tool servers and their tools

Source code in blue/tools/registry.py
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
class ToolRegistry(Registry):
    """A ToolRegistry manages tool servers and their tools"""

    def __init__(self, name="TOOL_REGISTRY", id=None, sid=None, cid=None, prefix=None, suffix=None, properties={}):
        """Instantiate a ToolRegistry object.

        Parameters:
            name: Name of the tool registry. Defaults to "TOOL_REGISTRY".
            id: ID of the tool registry. Defaults to None.
            sid: SID (Short ID) of the tool registry. Defaults to None.
            cid: CID (Canonical ID) of the tool registry. Defaults to None.
            prefix: Prefix for the tool registry. Defaults to None.
            suffix: Suffix for the tool registry. Defaults to None.
            properties: Properties of the tool registry. Defaults to {}.
        """
        super().__init__(name=name, id=id, sid=sid, cid=cid, prefix=prefix, suffix=suffix, properties=properties)

    ###### initialization
    def _initialize_properties(self):
        """Initialize default properties for tool registry."""
        super()._initialize_properties()

    ######### server
    def register_server(self, server, created_by, description="", properties={}, rebuild=False):
        """Register a tool server to the registry.

        Parameters:
            server: Name of the tool server
            created_by: Creator of the tool server
            description: Description of the tool server. Defaults to "".
            properties: Properties of the tool server. Defaults to {}.
            rebuild: Whether to rebuild the registry index after registration. Defaults to False.
        """
        super().register_record(server, 'server', '/', created_by=created_by, description=description, properties=properties, rebuild=rebuild)

    def update_server(self, server, description=None, icon=None, properties=None, rebuild=False):
        """Update a tool server entry in the registry.

        Parameters:
            server: Name of the tool server
            description: Description of the tool server. Defaults to None.
            icon: Icon for the tool server. Defaults to None.
            properties: Properties of the tool server. Defaults to None.
            rebuild: Whether to rebuild the registry index after update. Defaults to False.
        """
        super().update_record(server, 'server', '/', description=description, icon=icon, properties=properties, rebuild=rebuild)

    def deregister_server(self, server, rebuild=False):
        """Deregister a tool server from the registry.

        Parameters:
            server: Name of the tool server
            rebuild: Whether to rebuild the registry index after deregistration. Defaults to False.
        """
        record = self.get_server(server)
        super().deregister(record, rebuild=rebuild)

    def get_servers(self):
        """Get all registered tool servers.

        Returns:
            List of registered tool servers
        """
        return super().list_records(type="server", scope="/")

    def get_server(self, server):
        """Get a specific registered tool server metadata.

        Parameters:
            server: Name of the tool server

        Returns:
            Metadata of the specified tool server
        """
        return super().get_record(server, 'server', '/')

    # description
    def get_server_description(self, server):
        """Get the description of a specific registered tool server.

        Parameters:
            server: Name of the tool server

        Returns:
            (str): Description of the specified tool server
        """
        return super().get_record_description(server, 'server', '/')

    def set_server_description(self, server, description, rebuild=False):
        """Set the description of a specific registered tool server.

        Parameters:
            server: Name of the tool server
            description (str): New description for the tool server
            rebuild (bool): Whether to rebuild the registry index after setting the new description. Defaults to False.
        """
        super().set_record_description(server, 'server', '/', description, rebuild=rebuild)

    # properties
    def get_server_properties(self, server):
        """Get the properties of a specific registered tool server.

        Parameters:
            server: Name of the tool server

        Returns:
            Properties of the specified tool server
        """
        return super().get_record_properties(server, 'server', '/')

    def get_server_property(self, server, key):
        """Get a specific property of a registered tool server.

        Parameters:
            server: Name of the tool server
            key (str): Property key

        Returns:
            (Any): Value of the specified property key for the tool server
        """
        return super().get_record_property(server, 'server', '/', key)

    def set_server_property(self, server, key, value, rebuild=False):
        """Set a specific property of a registered tool server.

        Parameters:
            server: Name of the tool server
            key (str): Key of the property to set
            value (Any): Value of the property to set
            rebuild (bool): Whether to rebuild the registry index after setting the property. Defaults to False.
        """
        super().set_record_property(server, 'server', '/', key, value, rebuild=rebuild)

    def delete_server_property(self, server, key, rebuild=False):
        """Delete a specific property of a registered tool server.

        Parameters:
            server: Name of the tool server
            key (str): Key of the property to delete
            rebuild (bool): Whether to rebuild the registry index after deleting the property. Defaults to False.
        """
        super().delete_record_property(server, 'server', '/', key, rebuild=rebuild)

    ######### server/tool
    def register_server_tool(self, server, tool, description="", properties={}, rebuild=False):
        """Register a tool under a specific tool server in the registry.

        Parameters:
            server: Name of the tool server
            tool: Name of the tool
            description (str): Description of the tool. Defaults to "".
            properties: Properties of the tool. Defaults to {}.
            rebuild (bool): Whether to rebuild the registry index after registration of the tool. Defaults to False.
        """
        super().register_record(tool, 'tool', f'/server/{server}', description=description, properties=properties, rebuild=rebuild)

    def update_server_tool(self, server, tool, description=None, properties=None, rebuild=False):
        """Update a tool entry under a specific tool server in the registry.

        Parameters:
            server: Name of the tool server
            tool: Name of the tool
            description (str): Description of the tool. Defaults to None.
            properties: Properties of the tool. Defaults to None.
            rebuild (bool): Whether to rebuild the registry index after update of the tool. Defaults to False.
        """
        super().update_record(tool, 'tool', f'/server/{server}', description=description, properties=properties, rebuild=rebuild)

    def deregister_server_tool(self, server, tool, rebuild=False):
        """Deregister a tool from under a specific tool server in the registry.

        Parameters:
            server: Name of the tool server
            tool: Tool to deregister
            rebuild (bool): Whether to rebuild the registry index after deregistration of the tool. Defaults to False.
        """
        record = self.get_server_tool(server, tool)
        super().deregister(record, rebuild=rebuild)

    def get_server_tools(self, server):
        """Get all registered tools under a specific tool server.

        Parameters:
            server: Name of the tool server

        Returns:
            List of registered tools under the specified tool server
        """
        return super().filter_record_contents(server, 'server', '/', filter_type='tool')

    def get_server_tool(self, server, tool):
        """Get a specific registered tool metadata under a specific tool server.

        Parameters:
            server: Name of the tool server
            tool: Name of the tool

        Returns:
            Metadata of the specified tool under the specified tool server
        """
        return super().filter_record_contents(server, 'server', '/', filter_type='tool', filter_name=tool, single=True)

    # description
    def get_server_tool_description(self, server, tool):
        """Get the description of a specific registered tool under a specific tool server.

        Parameters:
            server: Name of the tool server
            tool: Name of the tool

        Returns:
            (str): Description of the specified tool under the specified tool server
        """
        return super().get_record_description(tool, 'tool', f'/server/{server}')

    def set_server_tool_description(self, server, tool, description, rebuild=False):
        """Set the description of a specific registered tool under a specific tool server.

        Parameters:
            server: Name of the tool server
            tool: Name of the tool
            description (str): New description for the tool
            rebuild (bool): Whether to rebuild the registry index after setting the new description for the tool. Defaults to False.
        """
        super().set_record_description(tool, 'tool', f'/server/{server}', description, rebuild=rebuild)

    # properties
    def get_server_tool_properties(self, server, tool):
        """Get the properties of a specific registered tool under a specific tool server.

        Parameters:
            server: Name of the tool server
            tool: Name of the tool

        Returns:
            Properties of the specified tool under the specified tool server
        """
        return super().get_record_properties(tool, 'tool', f'/server/{server}')

    def get_server_tool_property(self, server, tool, key):
        """Get a specific property of a registered tool under a specific tool server.

        Parameters:
            server: Name of the tool server
            tool: Name of the tool
            key (str): Property key

        Returns:
            (Any): Value of the specified property key for the tool under the specified tool server
        """
        return super().get_record_property(tool, 'tool', f'/server/{server}', key)

    def set_server_tool_property(self, server, tool, key, value, rebuild=False):
        """Set a specific property of a registered tool under a specific tool server.

        Parameters:
            server: Name of the tool server
            tool: Name of the tool
            key (str): Key of the property to set
            value (Any): Value of the property to set
            rebuild (bool): Whether to rebuild the registry index after setting the property. Defaults to False.
        """
        super().set_record_property(tool, 'tool', f'/server/{server}', key, value, rebuild=rebuild)

    ######### sync
    # server connection (part of properties)
    def get_server_connection(self, server):
        """Get the connection properties of a specific registered tool server.

        Parameters:
            server: Name of the tool server

        Returns:
            Connection properties of the specified tool server
        """
        return self.get_server_property(server, 'connection')

    def set_server_connection(self, server, connection, rebuild=False):
        """Set the connection properties of a specific registered tool server.

        Parameters:
            server: Name of the tool server
            connection: Connection properties to set
            rebuild (bool): Whether to rebuild the registry index after setting the connection properties. Defaults to False.
        """
        self.set_server_property(server, 'connection', connection, rebuild=rebuild)

    def connect_server(self, server):
        """Connect to a specific registered tool server.

        Parameters:
            server: Name of the tool server

        Returns:
            Connection object to the specified tool server or None
        """
        connection = None

        properties = self.get_server_properties(server)

        if properties:
            if 'connection' in properties:
                connection_properties = properties["connection"]

                protocol = connection_properties["protocol"]
                if protocol:
                    if protocol == "local":
                        from blue.tools.clients.local_client import LocalToolClient
                        from blue.tools.clients import local_tools

                        connection = LocalToolClient(server, tools=local_tools.tools_dict, properties=properties)
                    elif protocol == "ray":
                        from blue.tools.clients.ray_client import RayToolClient
                        from blue.tools.clients import ray_tools

                        connection = RayToolClient(server, tools=ray_tools.tools_dict, properties=properties)
                    elif protocol == "mcp":
                        from blue.tools.clients.mcp_client import MCPToolClient

                        connection = MCPToolClient(server, properties=properties)

        return connection

    def execute_tool(self, tool, server, args, kwargs):
        """Execute a specific tool on a specific registered tool server.

        Parameters:
            tool: Name of the tool
            server: Name of the tool server
            args: Arguments for the tool function
            kwargs: Keyword arguments for the tool function

        Returns:
            Result of the tool execution or None
        """
        connection = self.connect_server(server)
        if connection:
            return connection.execute_tool(tool, args, kwargs)
        else:
            return None

    def sync_all(self, recursive=False):
        """Sync all registered tool servers and their tools.

        Parameters:
            recursive (bool): Whether to recursively sync tools. Defaults to False.
        """
        # TODO
        pass

    def sync_server(self, server, recursive=False, rebuild=False):
        """Sync a specific registered tool server and its tools.

        Parameters:
            server: Name of the tool server
            recursive (bool): Whether to recursively sync tools. Defaults to False.
            rebuild (bool): Whether to rebuild the registry index after syncing. Defaults to False.
        """
        connection = self.connect_server(server)
        if connection:
            # fetch server metadata
            metadata = connection.fetch_metadata()

            # update server properties
            properties = {}
            properties['metadata'] = metadata
            description = ""
            if 'description' in metadata:
                description = metadata['description']
            self.update_server(server, description=description, properties=properties, rebuild=rebuild)

            # fetch tools
            fetched_tools = connection.fetch_tools()
            fetched_tools_set = set(fetched_tools)

            # get existing tools
            registry_tools = self.get_server_tools(server)
            registry_tools_set = set(json_utils.json_query(registry_tools, '$.name', single=False))

            adds = set()
            removes = set()
            merges = set()

            ## compute add / remove / merge
            for tool in fetched_tools_set:
                if tool in registry_tools_set:
                    merges.add(tool)
                else:
                    adds.add(tool)
            for tool in registry_tools_set:
                if tool not in fetched_tools_set:
                    removes.add(tool)

            # update registry
            # add
            for tool in adds:
                self.register_server_tool(server, tool, description="", properties={}, rebuild=rebuild)

            # remove
            for tool in removes:
                self.deregister_server_tool(server, tool, rebuild=rebuild)

            ## recurse
            if recursive:
                for tool in fetched_tools_set:
                    self.sync_server_tool(server, tool, connection=connection, recursive=recursive, rebuild=rebuild)
            else:
                for tool in adds:
                    #  sync to update description, properties, schema
                    self.sync_server_tool(server, tool, connection=connection, recursive=False, rebuild=rebuild)

                for tool in merges:
                    #  sync to update description, properties, schema
                    self.sync_server_tool(server, tool, connection=connection, recursive=False, rebuild=rebuild)

    def sync_server_tool(self, server, tool, connection=None, recursive=False, rebuild=False):
        """Sync a specific tool under a specific registered tool server.

        Parameters:
            server: Name of the tool server
            tool: Name of the tool
            connection: Connection object to the tool server. If None, a new connection will be established. Defaults to None.
            recursive (bool): Whether to recursively sync. Defaults to False.
            rebuild (bool): Whether to rebuild the registry index after syncing. Defaults to False.
        """
        if connection is None:
            connection = self.connect_server(server)

        if connection:
            # fetch tool metadata
            metadata = connection.fetch_tool_metadata(tool)

            # update server tool properties
            description = ""
            if 'description' in metadata:
                description = metadata['description']
                del metadata['description']
            properties = {}
            if 'properties' in metadata:
                properties = metadata['properties']
                del metadata['properties']

            # add remaining as metadata
            if 'name' in metadata:
                del metadata['name']
            properties['metadata'] = metadata

            self.update_server_tool(server, tool, description=description, properties=properties, rebuild=rebuild)

__init__(name='TOOL_REGISTRY', id=None, sid=None, cid=None, prefix=None, suffix=None, properties={})

Instantiate a ToolRegistry object.

Parameters:

Name Type Description Default
name

Name of the tool registry. Defaults to "TOOL_REGISTRY".

'TOOL_REGISTRY'
id

ID of the tool registry. Defaults to None.

None
sid

SID (Short ID) of the tool registry. Defaults to None.

None
cid

CID (Canonical ID) of the tool registry. Defaults to None.

None
prefix

Prefix for the tool registry. Defaults to None.

None
suffix

Suffix for the tool registry. Defaults to None.

None
properties

Properties of the tool registry. Defaults to {}.

{}
Source code in blue/tools/registry.py
18
19
20
21
22
23
24
25
26
27
28
29
30
def __init__(self, name="TOOL_REGISTRY", id=None, sid=None, cid=None, prefix=None, suffix=None, properties={}):
    """Instantiate a ToolRegistry object.

    Parameters:
        name: Name of the tool registry. Defaults to "TOOL_REGISTRY".
        id: ID of the tool registry. Defaults to None.
        sid: SID (Short ID) of the tool registry. Defaults to None.
        cid: CID (Canonical ID) of the tool registry. Defaults to None.
        prefix: Prefix for the tool registry. Defaults to None.
        suffix: Suffix for the tool registry. Defaults to None.
        properties: Properties of the tool registry. Defaults to {}.
    """
    super().__init__(name=name, id=id, sid=sid, cid=cid, prefix=prefix, suffix=suffix, properties=properties)

connect_server(server)

Connect to a specific registered tool server.

Parameters:

Name Type Description Default
server

Name of the tool server

required

Returns:

Type Description

Connection object to the specified tool server or None

Source code in blue/tools/registry.py
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
def connect_server(self, server):
    """Connect to a specific registered tool server.

    Parameters:
        server: Name of the tool server

    Returns:
        Connection object to the specified tool server or None
    """
    connection = None

    properties = self.get_server_properties(server)

    if properties:
        if 'connection' in properties:
            connection_properties = properties["connection"]

            protocol = connection_properties["protocol"]
            if protocol:
                if protocol == "local":
                    from blue.tools.clients.local_client import LocalToolClient
                    from blue.tools.clients import local_tools

                    connection = LocalToolClient(server, tools=local_tools.tools_dict, properties=properties)
                elif protocol == "ray":
                    from blue.tools.clients.ray_client import RayToolClient
                    from blue.tools.clients import ray_tools

                    connection = RayToolClient(server, tools=ray_tools.tools_dict, properties=properties)
                elif protocol == "mcp":
                    from blue.tools.clients.mcp_client import MCPToolClient

                    connection = MCPToolClient(server, properties=properties)

    return connection

delete_server_property(server, key, rebuild=False)

Delete a specific property of a registered tool server.

Parameters:

Name Type Description Default
server

Name of the tool server

required
key str

Key of the property to delete

required
rebuild bool

Whether to rebuild the registry index after deleting the property. Defaults to False.

False
Source code in blue/tools/registry.py
148
149
150
151
152
153
154
155
156
def delete_server_property(self, server, key, rebuild=False):
    """Delete a specific property of a registered tool server.

    Parameters:
        server: Name of the tool server
        key (str): Key of the property to delete
        rebuild (bool): Whether to rebuild the registry index after deleting the property. Defaults to False.
    """
    super().delete_record_property(server, 'server', '/', key, rebuild=rebuild)

deregister_server(server, rebuild=False)

Deregister a tool server from the registry.

Parameters:

Name Type Description Default
server

Name of the tool server

required
rebuild

Whether to rebuild the registry index after deregistration. Defaults to False.

False
Source code in blue/tools/registry.py
62
63
64
65
66
67
68
69
70
def deregister_server(self, server, rebuild=False):
    """Deregister a tool server from the registry.

    Parameters:
        server: Name of the tool server
        rebuild: Whether to rebuild the registry index after deregistration. Defaults to False.
    """
    record = self.get_server(server)
    super().deregister(record, rebuild=rebuild)

deregister_server_tool(server, tool, rebuild=False)

Deregister a tool from under a specific tool server in the registry.

Parameters:

Name Type Description Default
server

Name of the tool server

required
tool

Tool to deregister

required
rebuild bool

Whether to rebuild the registry index after deregistration of the tool. Defaults to False.

False
Source code in blue/tools/registry.py
183
184
185
186
187
188
189
190
191
192
def deregister_server_tool(self, server, tool, rebuild=False):
    """Deregister a tool from under a specific tool server in the registry.

    Parameters:
        server: Name of the tool server
        tool: Tool to deregister
        rebuild (bool): Whether to rebuild the registry index after deregistration of the tool. Defaults to False.
    """
    record = self.get_server_tool(server, tool)
    super().deregister(record, rebuild=rebuild)

execute_tool(tool, server, args, kwargs)

Execute a specific tool on a specific registered tool server.

Parameters:

Name Type Description Default
tool

Name of the tool

required
server

Name of the tool server

required
args

Arguments for the tool function

required
kwargs

Keyword arguments for the tool function

required

Returns:

Type Description

Result of the tool execution or None

Source code in blue/tools/registry.py
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
def execute_tool(self, tool, server, args, kwargs):
    """Execute a specific tool on a specific registered tool server.

    Parameters:
        tool: Name of the tool
        server: Name of the tool server
        args: Arguments for the tool function
        kwargs: Keyword arguments for the tool function

    Returns:
        Result of the tool execution or None
    """
    connection = self.connect_server(server)
    if connection:
        return connection.execute_tool(tool, args, kwargs)
    else:
        return None

get_server(server)

Get a specific registered tool server metadata.

Parameters:

Name Type Description Default
server

Name of the tool server

required

Returns:

Type Description

Metadata of the specified tool server

Source code in blue/tools/registry.py
80
81
82
83
84
85
86
87
88
89
def get_server(self, server):
    """Get a specific registered tool server metadata.

    Parameters:
        server: Name of the tool server

    Returns:
        Metadata of the specified tool server
    """
    return super().get_record(server, 'server', '/')

get_server_connection(server)

Get the connection properties of a specific registered tool server.

Parameters:

Name Type Description Default
server

Name of the tool server

required

Returns:

Type Description

Connection properties of the specified tool server

Source code in blue/tools/registry.py
281
282
283
284
285
286
287
288
289
290
def get_server_connection(self, server):
    """Get the connection properties of a specific registered tool server.

    Parameters:
        server: Name of the tool server

    Returns:
        Connection properties of the specified tool server
    """
    return self.get_server_property(server, 'connection')

get_server_description(server)

Get the description of a specific registered tool server.

Parameters:

Name Type Description Default
server

Name of the tool server

required

Returns:

Type Description
str

Description of the specified tool server

Source code in blue/tools/registry.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
def get_server_description(self, server):
    """Get the description of a specific registered tool server.

    Parameters:
        server: Name of the tool server

    Returns:
        (str): Description of the specified tool server
    """
    return super().get_record_description(server, 'server', '/')

get_server_properties(server)

Get the properties of a specific registered tool server.

Parameters:

Name Type Description Default
server

Name of the tool server

required

Returns:

Type Description

Properties of the specified tool server

Source code in blue/tools/registry.py
114
115
116
117
118
119
120
121
122
123
def get_server_properties(self, server):
    """Get the properties of a specific registered tool server.

    Parameters:
        server: Name of the tool server

    Returns:
        Properties of the specified tool server
    """
    return super().get_record_properties(server, 'server', '/')

get_server_property(server, key)

Get a specific property of a registered tool server.

Parameters:

Name Type Description Default
server

Name of the tool server

required
key str

Property key

required

Returns:

Type Description
Any

Value of the specified property key for the tool server

Source code in blue/tools/registry.py
125
126
127
128
129
130
131
132
133
134
135
def get_server_property(self, server, key):
    """Get a specific property of a registered tool server.

    Parameters:
        server: Name of the tool server
        key (str): Property key

    Returns:
        (Any): Value of the specified property key for the tool server
    """
    return super().get_record_property(server, 'server', '/', key)

get_server_tool(server, tool)

Get a specific registered tool metadata under a specific tool server.

Parameters:

Name Type Description Default
server

Name of the tool server

required
tool

Name of the tool

required

Returns:

Type Description

Metadata of the specified tool under the specified tool server

Source code in blue/tools/registry.py
205
206
207
208
209
210
211
212
213
214
215
def get_server_tool(self, server, tool):
    """Get a specific registered tool metadata under a specific tool server.

    Parameters:
        server: Name of the tool server
        tool: Name of the tool

    Returns:
        Metadata of the specified tool under the specified tool server
    """
    return super().filter_record_contents(server, 'server', '/', filter_type='tool', filter_name=tool, single=True)

get_server_tool_description(server, tool)

Get the description of a specific registered tool under a specific tool server.

Parameters:

Name Type Description Default
server

Name of the tool server

required
tool

Name of the tool

required

Returns:

Type Description
str

Description of the specified tool under the specified tool server

Source code in blue/tools/registry.py
218
219
220
221
222
223
224
225
226
227
228
def get_server_tool_description(self, server, tool):
    """Get the description of a specific registered tool under a specific tool server.

    Parameters:
        server: Name of the tool server
        tool: Name of the tool

    Returns:
        (str): Description of the specified tool under the specified tool server
    """
    return super().get_record_description(tool, 'tool', f'/server/{server}')

get_server_tool_properties(server, tool)

Get the properties of a specific registered tool under a specific tool server.

Parameters:

Name Type Description Default
server

Name of the tool server

required
tool

Name of the tool

required

Returns:

Type Description

Properties of the specified tool under the specified tool server

Source code in blue/tools/registry.py
242
243
244
245
246
247
248
249
250
251
252
def get_server_tool_properties(self, server, tool):
    """Get the properties of a specific registered tool under a specific tool server.

    Parameters:
        server: Name of the tool server
        tool: Name of the tool

    Returns:
        Properties of the specified tool under the specified tool server
    """
    return super().get_record_properties(tool, 'tool', f'/server/{server}')

get_server_tool_property(server, tool, key)

Get a specific property of a registered tool under a specific tool server.

Parameters:

Name Type Description Default
server

Name of the tool server

required
tool

Name of the tool

required
key str

Property key

required

Returns:

Type Description
Any

Value of the specified property key for the tool under the specified tool server

Source code in blue/tools/registry.py
254
255
256
257
258
259
260
261
262
263
264
265
def get_server_tool_property(self, server, tool, key):
    """Get a specific property of a registered tool under a specific tool server.

    Parameters:
        server: Name of the tool server
        tool: Name of the tool
        key (str): Property key

    Returns:
        (Any): Value of the specified property key for the tool under the specified tool server
    """
    return super().get_record_property(tool, 'tool', f'/server/{server}', key)

get_server_tools(server)

Get all registered tools under a specific tool server.

Parameters:

Name Type Description Default
server

Name of the tool server

required

Returns:

Type Description

List of registered tools under the specified tool server

Source code in blue/tools/registry.py
194
195
196
197
198
199
200
201
202
203
def get_server_tools(self, server):
    """Get all registered tools under a specific tool server.

    Parameters:
        server: Name of the tool server

    Returns:
        List of registered tools under the specified tool server
    """
    return super().filter_record_contents(server, 'server', '/', filter_type='tool')

get_servers()

Get all registered tool servers.

Returns:

Type Description

List of registered tool servers

Source code in blue/tools/registry.py
72
73
74
75
76
77
78
def get_servers(self):
    """Get all registered tool servers.

    Returns:
        List of registered tool servers
    """
    return super().list_records(type="server", scope="/")

register_server(server, created_by, description='', properties={}, rebuild=False)

Register a tool server to the registry.

Parameters:

Name Type Description Default
server

Name of the tool server

required
created_by

Creator of the tool server

required
description

Description of the tool server. Defaults to "".

''
properties

Properties of the tool server. Defaults to {}.

{}
rebuild

Whether to rebuild the registry index after registration. Defaults to False.

False
Source code in blue/tools/registry.py
38
39
40
41
42
43
44
45
46
47
48
def register_server(self, server, created_by, description="", properties={}, rebuild=False):
    """Register a tool server to the registry.

    Parameters:
        server: Name of the tool server
        created_by: Creator of the tool server
        description: Description of the tool server. Defaults to "".
        properties: Properties of the tool server. Defaults to {}.
        rebuild: Whether to rebuild the registry index after registration. Defaults to False.
    """
    super().register_record(server, 'server', '/', created_by=created_by, description=description, properties=properties, rebuild=rebuild)

register_server_tool(server, tool, description='', properties={}, rebuild=False)

Register a tool under a specific tool server in the registry.

Parameters:

Name Type Description Default
server

Name of the tool server

required
tool

Name of the tool

required
description str

Description of the tool. Defaults to "".

''
properties

Properties of the tool. Defaults to {}.

{}
rebuild bool

Whether to rebuild the registry index after registration of the tool. Defaults to False.

False
Source code in blue/tools/registry.py
159
160
161
162
163
164
165
166
167
168
169
def register_server_tool(self, server, tool, description="", properties={}, rebuild=False):
    """Register a tool under a specific tool server in the registry.

    Parameters:
        server: Name of the tool server
        tool: Name of the tool
        description (str): Description of the tool. Defaults to "".
        properties: Properties of the tool. Defaults to {}.
        rebuild (bool): Whether to rebuild the registry index after registration of the tool. Defaults to False.
    """
    super().register_record(tool, 'tool', f'/server/{server}', description=description, properties=properties, rebuild=rebuild)

set_server_connection(server, connection, rebuild=False)

Set the connection properties of a specific registered tool server.

Parameters:

Name Type Description Default
server

Name of the tool server

required
connection

Connection properties to set

required
rebuild bool

Whether to rebuild the registry index after setting the connection properties. Defaults to False.

False
Source code in blue/tools/registry.py
292
293
294
295
296
297
298
299
300
def set_server_connection(self, server, connection, rebuild=False):
    """Set the connection properties of a specific registered tool server.

    Parameters:
        server: Name of the tool server
        connection: Connection properties to set
        rebuild (bool): Whether to rebuild the registry index after setting the connection properties. Defaults to False.
    """
    self.set_server_property(server, 'connection', connection, rebuild=rebuild)

set_server_description(server, description, rebuild=False)

Set the description of a specific registered tool server.

Parameters:

Name Type Description Default
server

Name of the tool server

required
description str

New description for the tool server

required
rebuild bool

Whether to rebuild the registry index after setting the new description. Defaults to False.

False
Source code in blue/tools/registry.py
103
104
105
106
107
108
109
110
111
def set_server_description(self, server, description, rebuild=False):
    """Set the description of a specific registered tool server.

    Parameters:
        server: Name of the tool server
        description (str): New description for the tool server
        rebuild (bool): Whether to rebuild the registry index after setting the new description. Defaults to False.
    """
    super().set_record_description(server, 'server', '/', description, rebuild=rebuild)

set_server_property(server, key, value, rebuild=False)

Set a specific property of a registered tool server.

Parameters:

Name Type Description Default
server

Name of the tool server

required
key str

Key of the property to set

required
value Any

Value of the property to set

required
rebuild bool

Whether to rebuild the registry index after setting the property. Defaults to False.

False
Source code in blue/tools/registry.py
137
138
139
140
141
142
143
144
145
146
def set_server_property(self, server, key, value, rebuild=False):
    """Set a specific property of a registered tool server.

    Parameters:
        server: Name of the tool server
        key (str): Key of the property to set
        value (Any): Value of the property to set
        rebuild (bool): Whether to rebuild the registry index after setting the property. Defaults to False.
    """
    super().set_record_property(server, 'server', '/', key, value, rebuild=rebuild)

set_server_tool_description(server, tool, description, rebuild=False)

Set the description of a specific registered tool under a specific tool server.

Parameters:

Name Type Description Default
server

Name of the tool server

required
tool

Name of the tool

required
description str

New description for the tool

required
rebuild bool

Whether to rebuild the registry index after setting the new description for the tool. Defaults to False.

False
Source code in blue/tools/registry.py
230
231
232
233
234
235
236
237
238
239
def set_server_tool_description(self, server, tool, description, rebuild=False):
    """Set the description of a specific registered tool under a specific tool server.

    Parameters:
        server: Name of the tool server
        tool: Name of the tool
        description (str): New description for the tool
        rebuild (bool): Whether to rebuild the registry index after setting the new description for the tool. Defaults to False.
    """
    super().set_record_description(tool, 'tool', f'/server/{server}', description, rebuild=rebuild)

set_server_tool_property(server, tool, key, value, rebuild=False)

Set a specific property of a registered tool under a specific tool server.

Parameters:

Name Type Description Default
server

Name of the tool server

required
tool

Name of the tool

required
key str

Key of the property to set

required
value Any

Value of the property to set

required
rebuild bool

Whether to rebuild the registry index after setting the property. Defaults to False.

False
Source code in blue/tools/registry.py
267
268
269
270
271
272
273
274
275
276
277
def set_server_tool_property(self, server, tool, key, value, rebuild=False):
    """Set a specific property of a registered tool under a specific tool server.

    Parameters:
        server: Name of the tool server
        tool: Name of the tool
        key (str): Key of the property to set
        value (Any): Value of the property to set
        rebuild (bool): Whether to rebuild the registry index after setting the property. Defaults to False.
    """
    super().set_record_property(tool, 'tool', f'/server/{server}', key, value, rebuild=rebuild)

sync_all(recursive=False)

Sync all registered tool servers and their tools.

Parameters:

Name Type Description Default
recursive bool

Whether to recursively sync tools. Defaults to False.

False
Source code in blue/tools/registry.py
356
357
358
359
360
361
362
363
def sync_all(self, recursive=False):
    """Sync all registered tool servers and their tools.

    Parameters:
        recursive (bool): Whether to recursively sync tools. Defaults to False.
    """
    # TODO
    pass

sync_server(server, recursive=False, rebuild=False)

Sync a specific registered tool server and its tools.

Parameters:

Name Type Description Default
server

Name of the tool server

required
recursive bool

Whether to recursively sync tools. Defaults to False.

False
rebuild bool

Whether to rebuild the registry index after syncing. Defaults to False.

False
Source code in blue/tools/registry.py
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
def sync_server(self, server, recursive=False, rebuild=False):
    """Sync a specific registered tool server and its tools.

    Parameters:
        server: Name of the tool server
        recursive (bool): Whether to recursively sync tools. Defaults to False.
        rebuild (bool): Whether to rebuild the registry index after syncing. Defaults to False.
    """
    connection = self.connect_server(server)
    if connection:
        # fetch server metadata
        metadata = connection.fetch_metadata()

        # update server properties
        properties = {}
        properties['metadata'] = metadata
        description = ""
        if 'description' in metadata:
            description = metadata['description']
        self.update_server(server, description=description, properties=properties, rebuild=rebuild)

        # fetch tools
        fetched_tools = connection.fetch_tools()
        fetched_tools_set = set(fetched_tools)

        # get existing tools
        registry_tools = self.get_server_tools(server)
        registry_tools_set = set(json_utils.json_query(registry_tools, '$.name', single=False))

        adds = set()
        removes = set()
        merges = set()

        ## compute add / remove / merge
        for tool in fetched_tools_set:
            if tool in registry_tools_set:
                merges.add(tool)
            else:
                adds.add(tool)
        for tool in registry_tools_set:
            if tool not in fetched_tools_set:
                removes.add(tool)

        # update registry
        # add
        for tool in adds:
            self.register_server_tool(server, tool, description="", properties={}, rebuild=rebuild)

        # remove
        for tool in removes:
            self.deregister_server_tool(server, tool, rebuild=rebuild)

        ## recurse
        if recursive:
            for tool in fetched_tools_set:
                self.sync_server_tool(server, tool, connection=connection, recursive=recursive, rebuild=rebuild)
        else:
            for tool in adds:
                #  sync to update description, properties, schema
                self.sync_server_tool(server, tool, connection=connection, recursive=False, rebuild=rebuild)

            for tool in merges:
                #  sync to update description, properties, schema
                self.sync_server_tool(server, tool, connection=connection, recursive=False, rebuild=rebuild)

sync_server_tool(server, tool, connection=None, recursive=False, rebuild=False)

Sync a specific tool under a specific registered tool server.

Parameters:

Name Type Description Default
server

Name of the tool server

required
tool

Name of the tool

required
connection

Connection object to the tool server. If None, a new connection will be established. Defaults to None.

None
recursive bool

Whether to recursively sync. Defaults to False.

False
rebuild bool

Whether to rebuild the registry index after syncing. Defaults to False.

False
Source code in blue/tools/registry.py
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
def sync_server_tool(self, server, tool, connection=None, recursive=False, rebuild=False):
    """Sync a specific tool under a specific registered tool server.

    Parameters:
        server: Name of the tool server
        tool: Name of the tool
        connection: Connection object to the tool server. If None, a new connection will be established. Defaults to None.
        recursive (bool): Whether to recursively sync. Defaults to False.
        rebuild (bool): Whether to rebuild the registry index after syncing. Defaults to False.
    """
    if connection is None:
        connection = self.connect_server(server)

    if connection:
        # fetch tool metadata
        metadata = connection.fetch_tool_metadata(tool)

        # update server tool properties
        description = ""
        if 'description' in metadata:
            description = metadata['description']
            del metadata['description']
        properties = {}
        if 'properties' in metadata:
            properties = metadata['properties']
            del metadata['properties']

        # add remaining as metadata
        if 'name' in metadata:
            del metadata['name']
        properties['metadata'] = metadata

        self.update_server_tool(server, tool, description=description, properties=properties, rebuild=rebuild)

update_server(server, description=None, icon=None, properties=None, rebuild=False)

Update a tool server entry in the registry.

Parameters:

Name Type Description Default
server

Name of the tool server

required
description

Description of the tool server. Defaults to None.

None
icon

Icon for the tool server. Defaults to None.

None
properties

Properties of the tool server. Defaults to None.

None
rebuild

Whether to rebuild the registry index after update. Defaults to False.

False
Source code in blue/tools/registry.py
50
51
52
53
54
55
56
57
58
59
60
def update_server(self, server, description=None, icon=None, properties=None, rebuild=False):
    """Update a tool server entry in the registry.

    Parameters:
        server: Name of the tool server
        description: Description of the tool server. Defaults to None.
        icon: Icon for the tool server. Defaults to None.
        properties: Properties of the tool server. Defaults to None.
        rebuild: Whether to rebuild the registry index after update. Defaults to False.
    """
    super().update_record(server, 'server', '/', description=description, icon=icon, properties=properties, rebuild=rebuild)

update_server_tool(server, tool, description=None, properties=None, rebuild=False)

Update a tool entry under a specific tool server in the registry.

Parameters:

Name Type Description Default
server

Name of the tool server

required
tool

Name of the tool

required
description str

Description of the tool. Defaults to None.

None
properties

Properties of the tool. Defaults to None.

None
rebuild bool

Whether to rebuild the registry index after update of the tool. Defaults to False.

False
Source code in blue/tools/registry.py
171
172
173
174
175
176
177
178
179
180
181
def update_server_tool(self, server, tool, description=None, properties=None, rebuild=False):
    """Update a tool entry under a specific tool server in the registry.

    Parameters:
        server: Name of the tool server
        tool: Name of the tool
        description (str): Description of the tool. Defaults to None.
        properties: Properties of the tool. Defaults to None.
        rebuild (bool): Whether to rebuild the registry index after update of the tool. Defaults to False.
    """
    super().update_record(tool, 'tool', f'/server/{server}', description=description, properties=properties, rebuild=rebuild)
Last update: 2025-10-07