Skip to main content
Glama
README.md
# topgg-mcp

A [Model Context Protocol](https://modelcontextprotocol.io) server for the [Top.gg v1 API](https://docs.top.gg/api/v1/introduction), letting AI assistants manage a Top.gg Discord bot, Discord server, or Roblox game listing directly.

## Tools

| Tool                  | Description                                                  |
| --------------------- | ------------------------------------------------------------ |
| `get_project`         | Retrieve the project associated with your token              |
| `update_project`      | Update headline and page content (per locale)                |
| `register_commands`   | Replace registered Discord slash commands (empty clears all) |
| `get_votes`           | Fetch paginated vote history (cursor-based)                  |
| `check_user_vote`     | Check whether a specific user has voted                      |
| `post_metrics`        | Submit Discord bot/server or Roblox game metrics             |
| `post_metrics_batch`  | Submit up to 100 metrics entries in one request              |
| `create_announcement` | Post a categorized project announcement (1 per 4 hours)      |

## Requirements

- Node.js 22+
- A Top.gg API token (obtained from your [Top.gg dashboard](https://top.gg/))

## Setup

### Single project

Set `TOPGG_TOKEN` to your API token. The `project` parameter on every tool is optional and can be omitted.

**Claude Desktop** (`claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "topgg": {
      "command": "npx",
      "args": ["-y", "topgg-mcp"],
      "env": {
        "TOPGG_TOKEN": "your-token-here"
      }
    }
  }
}
```

**Claude Code:**

```bash
claude mcp add topgg -e TOPGG_TOKEN=your-token-here -- npx -y topgg-mcp
```

### Multiple projects

Use `TOPGG_TOKEN_<NAME>` for each project. The suffix becomes the name used in the `project` parameter (lowercased). When multiple tokens are configured, the `project` parameter is required on every tool call.

```json
{
  "mcpServers": {
    "topgg": {
      "command": "npx",
      "args": ["-y", "topgg-mcp"],
      "env": {
        "TOPGG_TOKEN_MYBOT": "token-for-mybot",
        "TOPGG_TOKEN_OTHERBOT": "token-for-otherbot"
      }
    }
  }
}
```

With the above config, pass `"project": "mybot"` or `"project": "otherbot"` in every tool call.

You can also mix `TOPGG_TOKEN` (name: `"default"`) with named tokens if needed.

## API coverage

The server targets the Top.gg v1 REST API (`https://top.gg/api/v1`). All requests are authenticated with `Authorization: Bearer <token>`. API errors are surfaced as readable tool errors using the RFC 7807 problem details format returned by Top.gg.

| Method  | Endpoint                       | Tool                  |
| ------- | ------------------------------ | --------------------- |
| `GET`   | `/projects/@me`                | `get_project`         |
| `PATCH` | `/projects/@me`                | `update_project`      |
| `POST`  | `/projects/@me/announcements`  | `create_announcement` |
| `PATCH` | `/projects/@me/metrics`        | `post_metrics`        |
| `POST`  | `/projects/@me/metrics/batch`  | `post_metrics_batch`  |
| `PUT`   | `/projects/@me/commands`       | `register_commands`   |
| `GET`   | `/projects/@me/votes`          | `get_votes`           |
| `GET`   | `/projects/@me/votes/:user_id` | `check_user_vote`     |

**Rate limits** (enforced by Top.gg, not this server):

- 100 requests/second globally
- 60 requests/minute for bot endpoints
- Violations result in a 1-hour block
- Announcement cooldown responses include the API's `Retry-After` value in the tool error

## Development

```bash
pnpm install
pnpm build        # compile to dist/
pnpm typecheck    # TypeScript strict check
pnpm lint         # ESLint
pnpm format       # Prettier
pnpm test         # Vitest (no live API required)
pnpm test:coverage
```

Tests use `fetch` mocks — no `TOPGG_TOKEN` is needed to run them.

## License

ISC

TDQS

A3.7/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct action (project info, announcement, update, commands, votes, metrics). The vote and metrics tools are clearly differentiated by single vs. batch/list, so no ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with lowercase and underscores (e.g., get_project, post_metrics_batch), making them predictable and easy to understand.

Tool Count5/5

Eight tools cover the essential operations for managing a Top.gg project without being excessive. The count is well-scoped for the domain.

Completeness4/5

Core operations are covered, but there are minor gaps: no delete for project or announcement, no update for announcements or commands. The set is functional but not fully comprehensive.

Maintenance

ActivitySlowing
ResponsivenessUnresponsive