Skip to main content
Glama

mcp-glama-demo

by dotku
mcpm.py6.85 kB
#!/usr/bin/env python3 import argparse import json import os import sys from pathlib import Path # Default config file location DEFAULT_CONFIG_PATH = Path(os.path.expanduser("~/.mcpm/config.json")) def ensure_config_dir(): """Ensure the config directory exists.""" config_dir = DEFAULT_CONFIG_PATH.parent config_dir.mkdir(parents=True, exist_ok=True) return config_dir def load_config(): """Load the MCP configuration.""" if not DEFAULT_CONFIG_PATH.exists(): return {"mcpServers": {}} try: with open(DEFAULT_CONFIG_PATH, "r") as f: return json.load(f) except json.JSONDecodeError: print(f"Error: Invalid JSON in {DEFAULT_CONFIG_PATH}") return {"mcpServers": {}} def save_config(config): """Save the MCP configuration.""" ensure_config_dir() with open(DEFAULT_CONFIG_PATH, "w") as f: json.dump(config, f, indent=2) print(f"Configuration saved to {DEFAULT_CONFIG_PATH}") def cmd_ls(args): """List all configured MCP servers.""" config = load_config() if not config.get("mcpServers"): print("No MCP servers configured.") return print("Configured MCP servers:") for server_name, server_config in config["mcpServers"].items(): command = server_config.get("command", "") server_args = server_config.get("args", []) args_str = " ".join(server_args) print(f" {server_name}: {command} {args_str}") def cmd_rm(args): """Remove an MCP server configuration.""" config = load_config() if args.server_name not in config.get("mcpServers", {}): print(f"Error: Server '{args.server_name}' not found.") return del config["mcpServers"][args.server_name] save_config(config) print(f"Server '{args.server_name}' removed.") def parse_server_config(args): """Parse server configuration from arguments.""" if hasattr(args, 'config_string'): # Parse the configuration string parts = args.config_string.split() if len(parts) < 2: print("Error: Configuration string must contain at least server name and command") return None, None, None server_name = parts[0] command = parts[1] command_args = parts[2:] if len(parts) > 2 else [] else: # Using the traditional argument format server_name = args.server_name command = args.command command_args = args.args if hasattr(args, 'args') and args.args else [] return server_name, command, command_args def cmd_add_server(args): """Add a new MCP server configuration.""" config = load_config() if "mcpServers" not in config: config["mcpServers"] = {} server_name, command, command_args = parse_server_config(args) if not server_name: return # Check if server already exists if server_name in config["mcpServers"]: print(f"Error: Server '{server_name}' already exists. Use 'set-server' to update it.") return server_config = { "command": command, "args": command_args } config["mcpServers"][server_name] = server_config save_config(config) print(f"Server '{server_name}' added.") # Print the configuration for verification print("\nConfiguration:") print(f" Command: {command}") print(f" Args: {' '.join(command_args)}") print(f" Saved to: {DEFAULT_CONFIG_PATH}") def cmd_set_server(args): """Update an existing MCP server configuration.""" config = load_config() if "mcpServers" not in config: config["mcpServers"] = {} server_name, command, command_args = parse_server_config(args) if not server_name: return # Check if server exists if server_name not in config["mcpServers"]: print(f"Error: Server '{server_name}' does not exist. Use 'add-server' to create it.") return server_config = { "command": command, "args": command_args } config["mcpServers"][server_name] = server_config save_config(config) print(f"Server '{server_name}' updated.") # Print the configuration for verification print("\nConfiguration:") print(f" Command: {command}") print(f" Args: {' '.join(command_args)}") print(f" Saved to: {DEFAULT_CONFIG_PATH}") def main(): parser = argparse.ArgumentParser(description="Model Context Protocol Manager") subparsers = parser.add_subparsers(dest="command", help="Command to execute") # ls command subparsers.add_parser("ls", help="List all configured MCP servers") # rm command rm_parser = subparsers.add_parser("rm", help="Remove an MCP server configuration") rm_parser.add_argument("server_name", help="Name of the server to remove") # add-server command (for new servers) add_server_parser = subparsers.add_parser("add-server", help="Add a new MCP server configuration") add_server_parser.add_argument("server_name", help="Name of the server") add_server_parser.add_argument("command", help="Command to run the server") add_server_parser.add_argument("args", nargs="*", help="Arguments for the command") # add command (for new servers with a single string) add_parser = subparsers.add_parser("add", help="Add a new MCP server configuration using a single string") add_parser.add_argument("config_string", help="Full configuration string in format 'server_name command arg1 arg2 ...'") # set-server command (for updating existing servers) set_server_parser = subparsers.add_parser("set-server", help="Update an existing MCP server configuration") set_server_parser.add_argument("server_name", help="Name of the server") set_server_parser.add_argument("command", help="Command to run the server") set_server_parser.add_argument("args", nargs="*", help="Arguments for the command") # set command (for updating existing servers with a single string) set_parser = subparsers.add_parser("set", help="Update an existing MCP server configuration using a single string") set_parser.add_argument("config_string", help="Full configuration string in format 'server_name command arg1 arg2 ...'") args = parser.parse_args() if not args.command: parser.print_help() sys.exit(1) if args.command == "ls": cmd_ls(args) elif args.command == "rm": cmd_rm(args) elif args.command == "add-server": cmd_add_server(args) elif args.command == "add": cmd_add_server(args) elif args.command == "set-server": cmd_set_server(args) elif args.command == "set": cmd_set_server(args) if __name__ == "__main__": main()

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/dotku/mcp-samples'

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