Skip to content

Conversation

@GabrielDrapor
Copy link
Contributor

@GabrielDrapor GabrielDrapor commented Jun 24, 2025

User description

  • use https://getmcp.io instead
  • display whether the server is archived in mcpm info command output

PR Type

Enhancement


Description

  • Switch registry URL from mcpm.sh to getmcp.io

  • Add archived status display in mcpm info command

  • Redirect registry page to new domain


Changes walkthrough 📝

Relevant files
Enhancement
info.py
Add archived status display in info command                           

src/mcpm/commands/info.py

  • Add display of archived status for servers
  • Format code for better readability with line breaks
  • +19/-8   
    index.html
    Redirect registry page to getmcp.io                                           

    pages/registry/index.html

  • Replace entire registry page with redirect to getmcp.io/registry
  • Add automatic redirect functionality with fallback link
  • Remove all existing registry UI code
  • +30/-2196
    Configuration changes
    repository.py
    Switch registry URL to getmcp.io                                                 

    src/mcpm/utils/repository.py

  • Change default repository URL from mcpm.sh to getmcp.io
  • Format code with improved line breaks for readability
  • +9/-5     

    Need help?
  • Type /help how to ... in the comments thread for any questions about Qodo Merge usage.
  • Check out the documentation for more information.
  • @qodo-merge-pro
    Copy link
    Contributor

    qodo-merge-pro bot commented Jun 24, 2025

    PR Reviewer Guide 🔍

    (Review updated until commit 774df9e)

    Here are some key observations to aid the review process:

    ⏱️ Estimated effort to review: 2 🔵🔵⚪⚪⚪
    🧪 No relevant tests
    🔒 No security concerns identified
    ⚡ Recommended focus areas for review

    Code Formatting

    Multiple lines have been reformatted with line breaks that appear to be purely cosmetic changes without functional improvements. This increases diff noise and makes the actual functional changes harder to identify.

        console.print(
            f"[bold green]Showing information for MCP server:[/] [bold cyan]{server_name}[/]")
    
        try:
            # Get the server information
            server = repo_manager.get_server_metadata(server_name)
    
            if not server:
                console.print(
                    f"[yellow]Server '[bold]{server_name}[/]' not found.[/]")
                return
    
            # Display detailed information for this server
            _display_server_info(server)
    
        except Exception as e:
            print_error(
                f"Error retrieving information for server '{server_name}'", str(e))
    
    
    def _display_server_info(server):
        """Display detailed information about a server"""
        # Get server data
        name = server["name"]
        display_name = server.get("display_name", name)
        description = server.get("description", "No description")
        license_info = server.get("license", "Unknown")
        is_official = server.get("is_official", False)
        is_archived = server.get("is_archived", False)
    
        # Get author info
        author_info = server.get("author", {})
        author_name = author_info.get("name", "Unknown")
        author_email = author_info.get("email", "")
        author_url = author_info.get("url", "")
    
        # Build categories and tags
        categories = server.get("categories", [])
        tags = server.get("tags", [])
    
        # Get installation details
        installations = server.get("installations", {})
        installation = server.get("installation", {})
        package = installation.get("package", "")
    
        # Print server header
        console.print(f"[bold cyan]{display_name}[/] [dim]({name})[/]")
        console.print(f"[italic]{description}[/]\n")
    
        # Server information section
        console.print("[bold yellow]Server Information:[/]")
        if categories:
            console.print(f"Categories: {', '.join(categories)}")
        if tags:
            console.print(f"Tags: {', '.join(tags)}")
        if package:
            console.print(f"Package: {package}")
        console.print(f"Author: {author_name}" +
                      (f" ({author_email})" if author_email else ""))
        console.print(f"License: {license_info}")
        console.print(f"Official: {is_official}")
        if is_archived:
            console.print(f"Archived: {is_archived}")
        console.print("")
    
        # URLs section
        console.print("[bold yellow]URLs:[/]")
    
        # Repository URL
        if "repository" in server and "url" in server["repository"]:
            repo_url = server["repository"]["url"]
            console.print(f"Repository: [blue underline]{repo_url}[/]")
    
        # Homepage URL
        if "homepage" in server:
            homepage_url = server["homepage"]
            console.print(f"Homepage: [blue underline]{homepage_url}[/]")
    
        # Documentation URL
        if "documentation" in server:
            doc_url = server["documentation"]
            console.print(f"Documentation: [blue underline]{doc_url}[/]")
    
        # Author URL
        if author_url:
            console.print(f"Author URL: [blue underline]{author_url}[/]")
    
        console.print("")
    
        # Installation details section
        if installations:
            console.print("[bold yellow]Installation Details:[/]")
            for method_name, method in installations.items():
                method_type = method.get("type", "unknown")
                description = method.get(
                    "description", f"{method_type} installation")
                recommended = " [green](recommended)[/]" if method.get(
                    "recommended", False) else ""
    
                console.print(
                    f"[cyan]{method_type}[/]: {description}{recommended}")
    
                # Show command if available
                if "command" in method:
                    cmd = method["command"]
                    args = method.get("args", [])
                    cmd_str = f"{cmd} {' '.join(args)}" if args else cmd
                    console.print(f"Command: [green]{cmd_str}[/]")
    
                # Show dependencies if available
                dependencies = method.get("dependencies", [])
                if dependencies:
                    console.print("Dependencies: " + ", ".join(dependencies))
    
                # Show environment variables if available
                env_vars = method.get("env", {})
                if env_vars:
                    console.print("Environment Variables:")
                    for key, value in env_vars.items():
                        console.print(
                            f'  [bold blue]{key}[/] = [green]"{value}"[/]')
    Complete Replacement

    The entire registry page has been replaced with a simple redirect. This removes all existing functionality and UI. Verify this is intentional and that users are properly informed about the migration.

    ---
    ---
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Redirecting to getmcp.io</title>
        <meta http-equiv="refresh" content="0; url=https://getmcp.io/registry">
        <script>
            // Immediate redirect for better compatibility
            window.location.replace('https://getmcp.io/registry');
        </script>
        <style>
            body {
                font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
                display: flex;
                justify-content: center;
                align-items: center;
                height: 100vh;
                margin: 0;
                background: #f5f5f5;
            }
            .redirect-message {
                text-align: center;
                padding: 2rem;
                background: white;
                border-radius: 8px;
                box-shadow: 0 2px 8px rgba(0,0,0,0.1);
            }
            .redirect-message h1 {
                margin-bottom: 1rem;
                color: #333;
            }
            .redirect-message p {
                color: #666;
                margin-bottom: 1rem;
            }
            .redirect-message a {
                color: #007bff;
                text-decoration: none;
            }
            .redirect-message a:hover {
                text-decoration: underline;
            }
        </style>
    </head>
    
    <body>
        <div class="redirect-message">
            <h1>Redirecting...</h1>
            <p>You are being redirected to the new MCP registry at <a href="https://getmcp.io/registry">getmcp.io/registry</a></p>
            <p>If you are not redirected automatically, <a href="https://getmcp.io/registry">click here</a>.</p>
        </div>
    </body>
    
    </html>

    @qodo-merge-pro
    Copy link
    Contributor

    qodo-merge-pro bot commented Jun 24, 2025

    CI Feedback 🧐

    (Feedback updated until commit ef4582b)

    A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

    Action: validate-manifests

    Failed stage: Validate Server JSON Files [❌]

    Failure summary:

    The action failed because no files were found matching the pattern mcp-registry/servers/*.json. The
    schema validator action was configured to validate JSON files in the mcp-registry/servers/ directory
    against the schema mcp-registry/schema/server-schema.json, but the specified file pattern did not
    match any existing files.

    Relevant error logs:
    1:  ##[group]Runner Image Provisioner
    2:  Hosted Compute Agent
    ...
    
    101:  Or undo this operation with:
    102:  git switch -
    103:  Turn off this advice by setting config variable advice.detachedHead to false
    104:  HEAD is now at b894768 Merge ef4582b31774309e0acb7887ad6096b670ae6d88 into 448a9eb6d8214989e92eb73bbfba66cc89283fe8
    105:  ##[endgroup]
    106:  [command]/usr/bin/git log -1 --format=%H
    107:  b89476828cd80238cceae8fa3f5188e83dea9a77
    108:  ##[group]Run cardinalby/schema-validator-action@v3
    109:  with:
    110:  file: mcp-registry/servers/*.json
    111:  schema: mcp-registry/schema/server-schema.json
    112:  mode: default
    113:  fixSchemas: false
    114:  fileParser: auto
    115:  ##[endgroup]
    116:  ##[error]No files found according to "file" input.
    117:  ##[error]Failed because of file error
    118:  Post job cleanup.
    

    @qodo-merge-pro
    Copy link
    Contributor

    qodo-merge-pro bot commented Jun 24, 2025

    PR Code Suggestions ✨

    Latest suggestions up to 774df9e
    Explore these optional code suggestions:

    CategorySuggestion                                                                                                                                    Impact
    General
    Fix archived status display logic

    The archived status should only be displayed when the server is actually
    archived (True), not when the field exists with any value. This prevents showing
    "Archived: False" for non-archived servers.

    src/mcpm/commands/info.py [91-92]

     if is_archived:
    -    console.print(f"Archived: {is_archived}")
    +    console.print("[yellow]Archived: Yes[/]")
    • Apply / Chat
    Suggestion importance[1-10]: 4

    __

    Why: The suggestion's reasoning is flawed; the existing code if is_archived: already correctly handles the case and only prints when the value is True. However, the improved_code offers a minor cosmetic improvement by changing the output from Archived: True to the more user-friendly [yellow]Archived: Yes[/].

    Low
    • Update

    Previous suggestions

    Suggestions up to commit 774df9e
    CategorySuggestion                                                                                                                                    Impact
    General
    Add endpoint verification comment

    Verify that the new registry URL endpoint is accessible and returns the expected
    JSON format. A broken or incompatible API endpoint could cause the application
    to fail.

    src/mcpm/utils/repository.py [19]

     DEFAULT_REPO_URL = "https://getmcp.io/api/servers.json"
    +# TODO: Verify endpoint compatibility and add fallback mechanism
    Suggestion importance[1-10]: 5

    __

    Why: The suggestion correctly identifies a potential risk in changing the API endpoint. While it doesn't propose a code fix, asking for verification of such a critical change is a valid and helpful piece of feedback for the developer.

    Low

    @github-actions
    Copy link
    Contributor

    Summary

    This PR retires the in-repo registry page in favor of getmcp.io, updates the default repository URL accordingly, and tweaks the mcpm info command to show an is_archived flag.

    Notes

    pages/registry/index.html replaced with a minimal redirect page (-2 200 LOC)
    • Default repo URL switched to https://getmcp.io/api/servers.json
    info.py formatting cleanup + new “Archived” display support

    Review

    Clean, well-scoped change—redirect works and code paths now point to the new host.
    • Consider adding a changelog entry and updating any docs that reference the old URL
    • A quick unit/CLI test for the new is_archived output would lock the behaviour in place. Nice job!


    View workflow run

    @GabrielDrapor
    Copy link
    Contributor Author

    Decided to maintain both registries simultaneously for now

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Projects

    None yet

    Development

    Successfully merging this pull request may close these issues.

    2 participants