Skip to main content
Glama
parser.py1.83 kB
import json from pathlib import Path def load_json_file(filename, var_name=None): file_path = Path(__file__).with_name(filename) with open(file_path, "r", encoding="utf-8") as f: data = f.read() if var_name: data = data.replace(f"var {var_name} = ", "").rstrip("; \n") return json.loads(data) def resolve_ref(schema, definitions, seen=None): """ Recursively resolve $ref entries like "#/Elements" using common schema definitions. """ if seen is None: seen = set() if isinstance(schema, dict): if "$ref" in schema: ref = schema["$ref"] if ref.startswith("#/"): key = ref[2:] if key in seen: # cycle detected return definitions[key] seen.add(key) return resolve_ref(definitions[key], definitions, seen) return {k: resolve_ref(v, definitions, seen) for k, v in schema.items()} elif isinstance(schema, list): return [resolve_ref(item, definitions, seen) for item in schema] return schema def tapir_commands(): gCommands = load_json_file("command_definitions.js", var_name="gCommands") gSchemaDefinitions = load_json_file("common_schema_definitions.js", var_name="gSchemaDefinitions") parsed_commands = [] for group in gCommands: tag = group["name"] for cmd in group["commands"]: in_schema = cmd.get("inputScheme") in_resolved = resolve_ref(in_schema, gSchemaDefinitions) if in_schema is not None else None parsed_commands.append({ "name": cmd["name"], "tag": tag, "description": cmd["description"], "input_schema": in_resolved }) return parsed_commands

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lgradisar/archicad-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server