Skip to main content
Glama
Hantse
by Hantse
README.md
# ark-asa-mcp

`ark-asa-mcp` is a Node.js Model Context Protocol server for Ark: Survival Ascended servers that expose RCON.

It lets an MCP client run common ASA administration commands through a small, typed tool surface while keeping one or more RCON server definitions in a local `config.json` file.

## Features

- MCP stdio server built with `@modelcontextprotocol/sdk`.
- RCON command execution against one or more named Ark: Survival Ascended servers.
- Per-tool `serverName` routing when multiple servers are configured.
- Convenience tools for listing players, broadcasting messages, saving the world, and reading the game log.
- Centralized configuration through `config.json`.
- Unit-tested command helpers for input validation and output shaping.

## Requirements

- Node.js 20 or newer.
- One or more Ark: Survival Ascended servers with RCON enabled.
- The RCON host, port, and password for each configured server.

## Install

Developer mode:

```bash
npm install
npm run build
```

User mode:

Download `ark-asa-mcp-win-x64.zip` from a GitHub release, extract it, copy `config.example.json` to `config.json`, and point your MCP client at `ark-asa-mcp.exe`.

## Configuration

Copy `config.example.json` to `config.json` and edit the server definitions for your ASA hosts. The local `config.json` file is ignored by Git because it contains RCON passwords.

```json
{
  "defaultServerName": "azer",
  "timeoutMs": 10000,
  "maxResponseChars": 20000,
  "servers": [
    {
      "serverName": "azer",
      "host": "127.0.0.1",
      "port": 27020,
      "password": "change-me"
    },
    {
      "serverName": "island",
      "host": "127.0.0.2",
      "port": 27020,
      "password": "change-me-too"
    }
  ]
}
```

By default, `ark-asa-mcp` reads `config.json` from the process working directory. You can point to another file with `ARK_ASA_CONFIG_PATH`:

```bash
ARK_ASA_CONFIG_PATH=D:/Repositories/ark-asa-mcp/config.json
```

Each server object supports:

| Field | Required | Default | Notes |
| --- | --- | --- | --- |
| `serverName` | yes | none | Stable name used by MCP tools, such as `azer`. |
| `host` | no | `127.0.0.1` | ASA RCON host. |
| `port` | no | `27020` | ASA RCON port. |
| `password` | yes | none | ASA RCON password. |
| `timeoutMs` | no | top-level `timeoutMs` or `10000` | Per-server timeout override. |
| `maxResponseChars` | no | top-level `maxResponseChars` or `20000` | Per-server response cap. |

`defaultServerName` is optional. If it is not set and only one server is configured, tools can omit `serverName`. If more than one server is configured, tools should pass `serverName`.

Environment fallback is still available for simple or containerized deployments:

```bash
ARK_ASA_RCON_SERVER_NAME=azer
ARK_ASA_RCON_HOST=127.0.0.1
ARK_ASA_RCON_PORT=27020
ARK_ASA_RCON_PASSWORD=change-me
```

`ARK_ASA_RCON_SERVERS` and `ARK_RCON_*` aliases are still accepted as fallbacks when no config file exists.

## MCP Client Example

Release `.exe` mode:

```json
{
  "mcpServers": {
    "ark-asa": {
      "command": "C:/Tools/ark-asa-mcp/ark-asa-mcp.exe"
    }
  }
}
```

If the config file lives elsewhere:

```json
{
  "mcpServers": {
    "ark-asa": {
      "command": "C:/Tools/ark-asa-mcp/ark-asa-mcp.exe",
      "env": {
        "ARK_ASA_CONFIG_PATH": "C:/Tools/ark-asa-mcp/config.json"
      }
    }
  }
}
```

Node mode:

```json
{
  "mcpServers": {
    "ark-asa": {
      "command": "node",
      "args": ["D:/Repositories/ark-asa-mcp/dist/index.js"],
      "env": {
        "ARK_ASA_CONFIG_PATH": "D:/Repositories/ark-asa-mcp/config.json"
      }
    }
  }
}
```

For development, you can point the command at `tsx`:

```json
{
  "mcpServers": {
    "ark-asa-dev": {
      "command": "npx",
      "args": ["tsx", "D:/Repositories/ark-asa-mcp/src/index.ts"],
      "env": {
        "ARK_ASA_CONFIG_PATH": "D:/Repositories/ark-asa-mcp/config.json"
      }
    }
  }
}
```

## Tools

| Tool | Purpose |
| --- | --- |
| `asa_list_servers` | Lists configured ASA RCON servers without exposing passwords. |
| `asa_config_list_servers` | Lists servers from `config.json` without exposing passwords. |
| `asa_config_upsert_server` | Creates or updates a server entry in `config.json`. |
| `asa_config_remove_server` | Removes a server entry from `config.json`. |
| `asa_config_set_default_server` | Sets the default server in `config.json`. |
| `asa_rcon_command` | Runs a raw RCON command. |
| `asa_list_players` | Runs `ListPlayers` and returns raw plus parsed player entries. |
| `asa_broadcast` | Runs `Broadcast <message>`. |
| `asa_save_world` | Runs `SaveWorld`. |
| `asa_get_game_log` | Runs `GetGameLog`. |

Server-bound tools accept an optional `serverName` argument. It becomes required when multiple servers are configured and no default server is set.

Config-writing tools never return passwords, but any password supplied through an MCP client is still visible to that client. For local setup, `ark-asa-mcp configure` is safer.

The MCP server can start before any server is configured so `asa_config_upsert_server` can create the first `config.json`. RCON tools will return a clear error until at least one server exists.

## CLI Commands

```bash
ark-asa-mcp configure
ark-asa-mcp configure --server-name azer --host 127.0.0.1 --port 27020 --password change-me --default
ark-asa-mcp config:list
ark-asa-mcp --version
```

`configure` creates or updates `config.json` interactively.

## Releases

The release workflow builds a Windows x64 zip containing:

- `ark-asa-mcp.exe`
- `config.example.json`
- `README-USER.md`
- `LICENSE`

Push a tag like `v0.1.0` to create or update a draft GitHub release asset.

## Development

```bash
npm run typecheck
npm test
npm run build
```

The package entry point is `src/index.ts`. Build output is written to `dist/`.

Windows executable packaging uses Node.js single executable applications:

```bash
npm run package:win
```

This script expects Node.js 26 or newer.

## Security Notes

RCON has server administrator authority. Treat every RCON password like a production secret, avoid committing `.env` files, and only expose this MCP server to clients you trust.

The raw command tool intentionally supports arbitrary single-line RCON commands. Newline characters are rejected to prevent accidental command batching.

TDQS

B3.3/5.0

Scored across 10 tools

Disambiguation3/5

Most tools target distinct actions, but asa_list_servers and asa_config_list_servers appear to do nearly the same thing, creating real selection risk. The specialized RCON wrappers are clearly described, though asa_rcon_command can overlap with them by design.

Naming Consistency4/5

All names use the asa_ prefix and snake_case, and most follow a verb_noun pattern such as asa_list_players and asa_save_world. The config tools consistently use asa_config_<verb>_<object>, with minor deviations like asa_rcon_command and asa_broadcast.

Tool Count5/5

10 tools is well-scoped for a server that manages ASA RCON server configuration and provides common RCON operations. Each tool has a plausible role in the workflow, and the count is solidly within the ideal range.

Completeness4/5

The config lifecycle is covered with list, upsert, remove, and set-default, while RCON coverage includes a raw command plus wrappers for players, broadcast, save world, and game log. A direct status or connection-check tool is missing, but the raw RCON command provides a fallback for many edge cases.

Maintenance

ActivityInactive
ResponsivenessNo issues