Koskamo

RepoTrending MCP

A read-only MCP server that allows AI assistants to query GitHub trending data, including repos gaining stars by window (today, week, month), specific repo details, and search capabilities. It uses the same ranking logic as the main site, requires no authentication, and runs on Cloudflare Workers.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

RepoTrending MCP logo, by RepoTrendingCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by RepoTrending
MCP endpoint (Streamable HTTP)
https://mcp.repotrending.com/mcp
Vendor documentation

What you can do with it

  • Find top repos by stars gained today, this week or this month
  • Check stars, forks, and rank for a specific repository
  • Search tracked repos by words in name, description, or topics
  • View how stars gained is counted and which repos are tracked

Source and maintenance

Community listingRegistry 0.1.0

Protocol and capabilities

Server
repotrending 0.1.0
MCP protocol
2025-06-18
Tools
5 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

RepoTrending: read-only rankings of public GitHub repos by stars gained, from daily snapshots. Every result has data_date and a link to the matching page. Not affiliated with GitHub.

Tools

5 advertised

get_trending — Trending GitHub repos
Advertised by the server during the last successful anonymous check.
Advertised read-only

Top GitHub repos by stars gained today (last 24 hours), this week (7 days) or this month (30 days), or by total stars (window "all"). Optional language or topic filter. Use list_filters for valid names.

get_trending input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 25,
      "minimum": 1,
      "description": "How many repos to return (1 to 25)."
    },
    "topic": {
      "type": "string",
      "pattern": "^[A-Za-z0-9-]{1,40}$",
      "description": "GitHub topic, for example \"mcp\"."
    },
    "window": {
      "enum": [
        "today",
        "week",
        "month",
        "all"
      ],
      "type": "string",
      "default": "week",
      "description": "today = last 24 hours, week = 7 days, month = 30 days, all = total stars."
    },
    "language": {
      "type": "string",
      "maxLength": 30,
      "description": "Programming language, for example \"Rust\"."
    }
  },
  "additionalProperties": false
}
get_trending output schema
{
  "type": "object",
  "required": [
    "data_date",
    "collecting_since",
    "source",
    "method_url",
    "window",
    "language",
    "topic",
    "window_status",
    "repos_in_filter",
    "count",
    "truncated",
    "note",
    "text_note",
    "repos"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "count": {
      "type": "integer"
    },
    "repos": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "rank",
          "repo",
          "url",
          "stars",
          "stars_gained",
          "partial",
          "language",
          "description"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "rank": {
            "type": "integer"
          },
          "repo": {
            "type": "string"
          },
          "stars": {
            "type": "integer"
          },
          "partial": {
            "type": "boolean"
          },
          "language": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "stars_gained": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      }
    },
    "topic": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "source": {
      "type": "string"
    },
    "window": {
      "type": "string"
    },
    "language": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "data_date": {
      "type": "string",
      "description": "Day of the latest snapshot, YYYY-MM-DD."
    },
    "text_note": {
      "type": "string"
    },
    "truncated": {
      "type": "boolean"
    },
    "method_url": {
      "type": "string",
      "description": "Page that explains how the numbers are made."
    },
    "window_status": {
      "type": "object",
      "required": [
        "ready",
        "ready_on",
        "days_collected",
        "days_needed"
      ],
      "properties": {
        "ready": {
          "type": "boolean"
        },
        "ready_on": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "days_needed": {
          "type": "integer"
        },
        "days_collected": {
          "type": "integer"
        }
      }
    },
    "repos_in_filter": {
      "type": "integer"
    },
    "collecting_since": {
      "type": "string",
      "description": "First day of collected data, YYYY-MM-DD."
    }
  }
}
get_trending annotations
{
  "title": "Trending GitHub repos",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_repo — One GitHub repo
Advertised by the server during the last successful anonymous check.
Advertised read-only

Details of one tracked repo by owner/name: stars, forks, language, license, topics, star counts of the last days, gains and ranks per window.

get_repo input schema
{
  "type": "object",
  "required": [
    "repo"
  ],
  "properties": {
    "repo": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_.-]{1,100}/[A-Za-z0-9_.-]{1,100}$",
      "maxLength": 201,
      "minLength": 3,
      "description": "Repo as owner/name."
    }
  },
  "additionalProperties": false
}
get_repo output schema
{
  "type": "object",
  "required": [
    "data_date",
    "collecting_since",
    "source",
    "method_url",
    "repo",
    "url",
    "github_url",
    "description",
    "language",
    "license",
    "topics",
    "created_at",
    "forks",
    "stars",
    "first_seen",
    "stars_by_day",
    "stars_gained",
    "rank",
    "note",
    "text_note"
  ],
  "properties": {
    "url": {
      "type": "string"
    },
    "note": {
      "type": "string"
    },
    "rank": {
      "type": "object",
      "required": [
        "today",
        "week",
        "month",
        "all"
      ],
      "properties": {
        "all": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ]
        },
        "week": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ]
        },
        "month": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ]
        },
        "today": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "repo": {
      "type": "string"
    },
    "forks": {
      "type": "integer"
    },
    "stars": {
      "type": "integer"
    },
    "source": {
      "type": "string"
    },
    "topics": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "license": {
      "type": "string"
    },
    "language": {
      "type": "string"
    },
    "data_date": {
      "type": "string",
      "description": "Day of the latest snapshot, YYYY-MM-DD."
    },
    "text_note": {
      "type": "string"
    },
    "created_at": {
      "type": "string"
    },
    "first_seen": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "github_url": {
      "type": "string"
    },
    "method_url": {
      "type": "string",
      "description": "Page that explains how the numbers are made."
    },
    "description": {
      "type": "string"
    },
    "stars_by_day": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "description": "Total stars at each daily snapshot, oldest first (up to 31)."
    },
    "stars_gained": {
      "type": "object",
      "required": [
        "today",
        "week",
        "month"
      ],
      "properties": {
        "week": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ]
        },
        "month": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ]
        },
        "today": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "collecting_since": {
      "type": "string",
      "description": "First day of collected data, YYYY-MM-DD."
    }
  }
}
get_repo annotations
{
  "title": "One GitHub repo",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_repos — Search tracked repos
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find tracked repos by words in the name, description, topics or language. Every word must match. Results are ordered by relevance, then stars.

search_repos input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 25,
      "minimum": 1,
      "description": "How many repos to return (1 to 25)."
    },
    "query": {
      "type": "string",
      "maxLength": 80,
      "minLength": 2,
      "description": "Words to look for, for example \"vector database\"."
    },
    "language": {
      "type": "string",
      "maxLength": 30,
      "description": "Only repos in this language."
    }
  },
  "additionalProperties": false
}
search_repos output schema
{
  "type": "object",
  "required": [
    "data_date",
    "collecting_since",
    "source",
    "method_url",
    "language",
    "matches",
    "count",
    "truncated",
    "text_note",
    "repos"
  ],
  "properties": {
    "count": {
      "type": "integer"
    },
    "repos": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "repo",
          "url",
          "stars",
          "language",
          "topics",
          "description"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "repo": {
            "type": "string"
          },
          "stars": {
            "type": "integer"
          },
          "topics": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "language": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        }
      }
    },
    "source": {
      "type": "string"
    },
    "matches": {
      "type": "integer"
    },
    "language": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "data_date": {
      "type": "string",
      "description": "Day of the latest snapshot, YYYY-MM-DD."
    },
    "text_note": {
      "type": "string"
    },
    "truncated": {
      "type": "boolean"
    },
    "method_url": {
      "type": "string",
      "description": "Page that explains how the numbers are made."
    },
    "collecting_since": {
      "type": "string",
      "description": "First day of collected data, YYYY-MM-DD."
    }
  }
}
search_repos annotations
{
  "title": "Search tracked repos",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_filters — Languages and topics
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the languages or the GitHub topics that get_trending and search_repos accept, with how many tracked repos each has. Most repos first.

list_filters input schema
{
  "type": "object",
  "required": [
    "kind"
  ],
  "properties": {
    "kind": {
      "enum": [
        "language",
        "topic"
      ],
      "type": "string",
      "description": "Which list to return."
    },
    "limit": {
      "type": "integer",
      "default": 30,
      "maximum": 100,
      "minimum": 1,
      "description": "How many names to return (1 to 100)."
    }
  },
  "additionalProperties": false
}
list_filters output schema
{
  "type": "object",
  "required": [
    "data_date",
    "collecting_since",
    "source",
    "method_url",
    "kind",
    "total",
    "count",
    "truncated",
    "items"
  ],
  "properties": {
    "kind": {
      "type": "string"
    },
    "count": {
      "type": "integer"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "repos",
          "page"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "page": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "repos": {
            "type": "integer"
          }
        }
      }
    },
    "total": {
      "type": "integer"
    },
    "source": {
      "type": "string"
    },
    "data_date": {
      "type": "string",
      "description": "Day of the latest snapshot, YYYY-MM-DD."
    },
    "truncated": {
      "type": "boolean"
    },
    "method_url": {
      "type": "string",
      "description": "Page that explains how the numbers are made."
    },
    "collecting_since": {
      "type": "string",
      "description": "First day of collected data, YYYY-MM-DD."
    }
  }
}
list_filters annotations
{
  "title": "Languages and topics",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
how_we_rank — How the rankings are made
Advertised by the server during the last successful anonymous check.
Advertised read-only

Plain explanation of how RepoTrending counts stars gained, which repos it tracks, what it leaves out and how much data each window has so far.

how_we_rank input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
how_we_rank output schema
{
  "type": "object",
  "required": [
    "data_date",
    "collecting_since",
    "source",
    "method_url",
    "summary",
    "limits",
    "repos_tracked",
    "repos_available",
    "windows"
  ],
  "properties": {
    "limits": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "source": {
      "type": "string"
    },
    "summary": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "windows": {
      "type": "object",
      "required": [
        "today",
        "week",
        "month"
      ],
      "properties": {
        "week": {
          "type": "object",
          "required": [
            "ready",
            "ready_on",
            "days_collected",
            "days_needed"
          ],
          "properties": {
            "ready": {
              "type": "boolean"
            },
            "ready_on": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "days_needed": {
              "type": "integer"
            },
            "days_collected": {
              "type": "integer"
            }
          }
        },
        "month": {
          "type": "object",
          "required": [
            "ready",
            "ready_on",
            "days_collected",
            "days_needed"
          ],
          "properties": {
            "ready": {
              "type": "boolean"
            },
            "ready_on": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "days_needed": {
              "type": "integer"
            },
            "days_collected": {
              "type": "integer"
            }
          }
        },
        "today": {
          "type": "object",
          "required": [
            "ready",
            "ready_on",
            "days_collected",
            "days_needed"
          ],
          "properties": {
            "ready": {
              "type": "boolean"
            },
            "ready_on": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "days_needed": {
              "type": "integer"
            },
            "days_collected": {
              "type": "integer"
            }
          }
        }
      }
    },
    "data_date": {
      "type": "string",
      "description": "Day of the latest snapshot, YYYY-MM-DD."
    },
    "method_url": {
      "type": "string",
      "description": "Page that explains how the numbers are made."
    },
    "repos_tracked": {
      "type": "integer"
    },
    "repos_available": {
      "type": "integer"
    },
    "collecting_since": {
      "type": "string",
      "description": "First day of collected data, YYYY-MM-DD."
    }
  }
}
how_we_rank annotations
{
  "title": "How the rankings are made",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
258 ms
95th percentile latency
258 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 258 ms · metadata changed · 5 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http repotrending-mcp https://mcp.repotrending.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add repotrending-mcp --url https://mcp.repotrending.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable repotrending-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "repotrending-mcp": {
      "url": "https://mcp.repotrending.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "repotrending-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.repotrending.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start repotrending-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "repotrending-mcp": {
      "type": "http",
      "url": "https://mcp.repotrending.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http repotrending-mcp https://mcp.repotrending.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "repotrending-mcp": {
      "url": "https://mcp.repotrending.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "repotrending-mcp": {
      "serverUrl": "https://mcp.repotrending.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like RepoTrending MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.