Files
tekton/addons/godot_ai/clients/_registry.gd
T

72 lines
2.1 KiB
GDScript

@tool
class_name McpClientRegistry
extends RefCounted
## Central enumeration of every supported MCP client. Adding a new client
## means: drop a file in clients/, then append one preload below.
const _CLIENT_SCRIPTS := [
preload("res://addons/godot_ai/clients/claude_code.gd"),
preload("res://addons/godot_ai/clients/claude_desktop.gd"),
preload("res://addons/godot_ai/clients/codex.gd"),
preload("res://addons/godot_ai/clients/antigravity.gd"),
preload("res://addons/godot_ai/clients/cursor.gd"),
preload("res://addons/godot_ai/clients/windsurf.gd"),
preload("res://addons/godot_ai/clients/vscode.gd"),
preload("res://addons/godot_ai/clients/vscode_insiders.gd"),
preload("res://addons/godot_ai/clients/zed.gd"),
preload("res://addons/godot_ai/clients/gemini_cli.gd"),
preload("res://addons/godot_ai/clients/cline.gd"),
preload("res://addons/godot_ai/clients/kilo_code.gd"),
preload("res://addons/godot_ai/clients/roo_code.gd"),
preload("res://addons/godot_ai/clients/kiro.gd"),
preload("res://addons/godot_ai/clients/trae.gd"),
preload("res://addons/godot_ai/clients/cherry_studio.gd"),
preload("res://addons/godot_ai/clients/opencode.gd"),
preload("res://addons/godot_ai/clients/qwen_code.gd"),
preload("res://addons/godot_ai/clients/kimi_code.gd"),
]
static var _instances: Array[McpClient] = []
static var _by_id: Dictionary = {}
static func all() -> Array[McpClient]:
if _instances.is_empty():
_load()
return _instances
static func get_by_id(id: String) -> McpClient:
if _instances.is_empty():
_load()
return _by_id.get(id, null)
static func ids() -> PackedStringArray:
var out := PackedStringArray()
for c in all():
out.append(c.id)
return out
static func has_id(id: String) -> bool:
if _instances.is_empty():
_load()
return _by_id.has(id)
static func _load() -> void:
_instances.clear()
_by_id.clear()
for script in _CLIENT_SCRIPTS:
var inst: McpClient = script.new()
if inst.id.is_empty():
push_warning("MCP | client descriptor %s has empty id" % script.resource_path)
continue
if _by_id.has(inst.id):
push_warning("MCP | duplicate client id: %s" % inst.id)
continue
_instances.append(inst)
_by_id[inst.id] = inst