@mairwunnx/minecraft-mcp 3.0.1 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.RU.md +46 -336
- package/README.md +41 -317
- package/dist/tools/worlds.js +28 -2
- package/dist/version.js +1 -1
- package/openapi/worldapi.json +1017 -64
- package/package.json +1 -1
package/README.RU.md
CHANGED
|
@@ -1,370 +1,80 @@
|
|
|
1
1
|
# minecraft-mcp
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
<a href="https://www.npmjs.com/package/@mairwunnx/minecraft-mcp"><img alt="npm" src="https://img.shields.io/npm/v/@mairwunnx/minecraft-mcp?logo=npm&label=npm&color=CB3837"></a>
|
|
5
|
-
<a href="https://www.npmjs.com/package/@mairwunnx/minecraft-mcp"><img alt="npm downloads" src="https://img.shields.io/npm/dm/@mairwunnx/minecraft-mcp?label=downloads"></a>
|
|
6
|
-
<a href="https://github.com/MairwunNx/minecraft-mcp/releases/latest"><img alt="Release" src="https://img.shields.io/github/v/release/MairwunNx/minecraft-mcp?label=release"></a>
|
|
7
|
-
<a href="https://nodejs.org"><img alt="Node.js" src="https://img.shields.io/node/v/@mairwunnx/minecraft-mcp?logo=nodedotjs&label=node&color=5FA04E"></a>
|
|
8
|
-
<a href="https://github.com/MairwunNx/minecraft-mcp/actions/workflows/ci.yml"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/MairwunNx/minecraft-mcp/ci.yml?branch=master&label=CI"></a>
|
|
9
|
-
<a href="https://github.com/MairwunNx/minecraft-mcp/blob/master/LICENSE"><img alt="License" src="https://img.shields.io/github/license/MairwunNx/minecraft-mcp"></a>
|
|
10
|
-
<a href="https://registry.modelcontextprotocol.io/?q=com.mairwunnx/minecraft-mcp"><img alt="MCP Registry" src="https://img.shields.io/badge/MCP_Registry-com.mairwunnx%2Fminecraft--mcp-6E56CF"></a>
|
|
11
|
-
</p>
|
|
3
|
+
[](https://www.npmjs.com/package/@mairwunnx/minecraft-mcp) [](https://registry.modelcontextprotocol.io/?q=com.mairwunnx/minecraft-mcp) [](https://github.com/MairwunNx/minecraft-mcp/releases/latest)
|
|
12
4
|
|
|
13
5
|
🤖 **minecraft-mcp** даёт ИИ-агенту видеть ваш Minecraft-сервер и управлять им. Спросите Claude «кто онлайн и где они?», «почему сервер лагает?» или «раздай всем хлеб и сделай утро» — и он ответит по живым данным из вашего мира.
|
|
14
6
|
|
|
15
|
-
|
|
7
|
+
Он работает рядом с вашим ИИ-клиентом — Claude Desktop, Claude Code, Cursor, VS Code или любым другим, который понимает MCP, — и говорит с [WorldAPI](https://github.com/MairwunNx/minecraft-worldapi) на любом сервере Paper. Что агенту можно, решает токен, который вы ему дадите.
|
|
16
8
|
|
|
17
9
|
[English version](https://github.com/MairwunNx/minecraft-mcp/blob/master/README.md)
|
|
18
10
|
|
|
19
|
-
|
|
11
|
+
## Что вы получите
|
|
20
12
|
|
|
21
|
-
|
|
13
|
+
- 🧰 **73 инструмента** для сервера, миров, блоков, сундуков, сущностей, игроков, рейтингов, рецептов, конфигов, логов и Java-скриптов.
|
|
14
|
+
- 🎒 **Инвентари в подробностях**: чары, прочность и эффекты каждого предмета, а ещё то, что лежит в шалкерах и мешках.
|
|
15
|
+
- 📜 **Конфиги и логи**: агент читает консоль и любой конфиг, а с подходящим токеном меняет значение и сохраняет комментарии.
|
|
16
|
+
- 🔑 **Только то, что позволяет токен**: с токеном `viewer` агент видит 29 инструментов, которые только смотрят, а режим «только чтение» прячет всё, что меняет сервер.
|
|
17
|
+
- 🙋 **«Я» — это вы**: укажите свой ник, и вопрос «где я?» просто сработает.
|
|
18
|
+
- ⏳ **Живые события**: «скажи, когда Стив зайдёт».
|
|
19
|
+
- 🛡️ **Безопасность с самого начала**: текст из игры помечен как данные, инструменты предупреждают, когда что-то разрушают, а токен никуда не утекает.
|
|
20
|
+
- 🔌 **Любой клиент**: Claude Desktop в один клик или любой MCP-клиент через stdio или HTTP.
|
|
22
21
|
|
|
23
|
-
|
|
24
|
-
- 🌐 **Тем, кто делает сайт или бота.** Пусть агент изучит API за вас: он знает все эндпоинты и отвечает живыми данными, так что вы видите, что строить, ещё до первой строчки кода.
|
|
25
|
-
- 🧭 **Начинающим игрокам.** Один раз укажите свой ник и спрашивайте: «где я и безопасно ли тут?», «где ближайшая деревня?», «как скрафтить щит?», «что делать дальше?». Ответы — из вашего мира, а не из вики.
|
|
26
|
-
- 🧑💻 **Профессионалам.** Стройте, чистите сущности, правьте инвентари и сундуки, настраивайте конфиги, читайте логи, ждите событий и пишите скрипты на Java — всё обычными словами.
|
|
22
|
+
## Как начать
|
|
27
23
|
|
|
28
|
-
|
|
24
|
+
1. Поставьте [WorldAPI](https://github.com/MairwunNx/minecraft-worldapi) 3.0.0 или новее на сервер Paper и создайте токен командой `/worldapi token create agent`.
|
|
25
|
+
2. Добавьте minecraft-mcp в клиент. В Claude Desktop откройте [minecraft-mcp.mcpb](https://github.com/MairwunNx/minecraft-mcp/releases/latest/download/minecraft-mcp.mcpb). В Claude Code:
|
|
29
26
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
- ⏳ **Живые события.** Агент умеет ждать: «скажи, когда Стив зайдёт».
|
|
36
|
-
- 📝 **Готовые сценарии**: проверка здоровья сервера, поиск лагов, расследование гриферства, гид для новичка и где сейчас игрок.
|
|
37
|
-
- 🔌 **Любой клиент.** Claude Code, Claude Desktop в один клик, Cursor и всё, что понимает MCP, через stdio или HTTP.
|
|
27
|
+
```sh
|
|
28
|
+
claude mcp add minecraft -e WORLDAPI_URL=http://localhost:8110/api/v1 -e WORLDAPI_TOKEN=your-token -- npx -y @mairwunnx/minecraft-mcp
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
3. Спросите «как дела у сервера?». Cursor, VS Code и HTTP — на странице [Installation](https://github.com/MairwunNx/minecraft-mcp/wiki/Installation) в вики (на английском).
|
|
38
32
|
|
|
39
33
|
## Попробуйте вживую
|
|
40
34
|
|
|
41
|
-
Moonlands — мой хардкорный сервер с друзьями — работает на WorldAPI и открыт для чтения всем. Направьте агента туда без
|
|
35
|
+
Moonlands — мой хардкорный сервер с друзьями — работает на WorldAPI и открыт для чтения всем. Направьте агента туда без токена:
|
|
42
36
|
|
|
43
37
|
```sh
|
|
44
38
|
claude mcp add moonlands -e WORLDAPI_URL=https://minecraft.mairwunnx.com/worldapi/api/v1 -- npx -y @mairwunnx/minecraft-mcp
|
|
45
39
|
```
|
|
46
40
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
```json
|
|
50
|
-
{
|
|
51
|
-
"mcpServers": {
|
|
52
|
-
"moonlands": {
|
|
53
|
-
"command": "npx",
|
|
54
|
-
"args": ["-y", "@mairwunnx/minecraft-mcp"],
|
|
55
|
-
"env": { "WORLDAPI_URL": "https://minecraft.mairwunnx.com/worldapi/api/v1" }
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
Потом спросите «кто больше всех играл на Moonlands на этой неделе?» или «какая сейчас погода в верхнем мире?».
|
|
41
|
+
Потом спросите «кто больше всех играл на Moonlands на этой неделе?».
|
|
62
42
|
|
|
63
43
|
[](https://minecraft.mairwunnx.com)
|
|
64
44
|
|
|
65
|
-
Адрес для игроков из России — `ru.minecraft.mairwunnx.com`, для остальных — `minecraft.mairwunnx.com`.
|
|
66
|
-
|
|
67
|
-
## Установка
|
|
68
|
-
|
|
69
|
-
Понадобятся три вещи:
|
|
70
|
-
|
|
71
|
-
1. **Сервер на Paper с [WorldAPI](https://github.com/MairwunNx/minecraft-worldapi) 3.0.0 или новее.** Со старым сервер предупредит при запуске, и многие инструменты не сработают. Адрес WorldAPI заканчивается на `/api/v1`: `http://localhost:8110/api/v1` на той же машине или публичный адрес, который даёт ваш прокси.
|
|
72
|
-
2. **Токен WorldAPI.** Выполните в игре `/worldapi token create agent`, отметьте нужные группы и скопируйте токен из чата. Какая группа для какой задачи, подскажет раздел «Какой токен выбрать». Без токена агент видит только то, что WorldAPI показывает посетителям.
|
|
73
|
-
3. **Node.js 22 или новее** — для клиентов, которые запускают сервер через `npx`. Claude Desktop запускает бандл на своём Node.js.
|
|
74
|
-
|
|
75
|
-
В примерах ниже замените `your-token` своим токеном, а адрес — адресом вашего сервера.
|
|
76
|
-
|
|
77
|
-
### Claude Desktop
|
|
78
|
-
|
|
79
|
-
Скачайте [minecraft-mcp.mcpb](https://github.com/MairwunNx/minecraft-mcp/releases/latest/download/minecraft-mcp.mcpb) — самый свежий бандл — и откройте его. Claude Desktop установит его в один клик и спросит адрес WorldAPI, токен и, по желанию, ваш ник и режим «только чтение». Прошлые версии лежат на странице [Releases](https://github.com/MairwunNx/minecraft-mcp/releases).
|
|
80
|
-
|
|
81
|
-
### Claude Code
|
|
82
|
-
|
|
83
|
-
```sh
|
|
84
|
-
claude mcp add minecraft \
|
|
85
|
-
-e WORLDAPI_URL=http://localhost:8110/api/v1 \
|
|
86
|
-
-e WORLDAPI_TOKEN=your-token \
|
|
87
|
-
-e WORLDAPI_PLAYER=Steve \
|
|
88
|
-
-- npx -y @mairwunnx/minecraft-mcp
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
Добавьте `--scope user`, чтобы сервер был во всех проектах. Наберите `/mcp` в Claude Code, чтобы увидеть инструменты.
|
|
92
|
-
|
|
93
|
-
### Cursor
|
|
94
|
-
|
|
95
|
-
Положите это в `.cursor/mcp.json` в проекте или в `~/.cursor/mcp.json` для всех проектов:
|
|
96
|
-
|
|
97
|
-
```json
|
|
98
|
-
{
|
|
99
|
-
"mcpServers": {
|
|
100
|
-
"minecraft": {
|
|
101
|
-
"command": "npx",
|
|
102
|
-
"args": ["-y", "@mairwunnx/minecraft-mcp"],
|
|
103
|
-
"env": {
|
|
104
|
-
"WORLDAPI_URL": "http://localhost:8110/api/v1",
|
|
105
|
-
"WORLDAPI_TOKEN": "your-token",
|
|
106
|
-
"WORLDAPI_PLAYER": "Steve"
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### VS Code
|
|
114
|
-
|
|
115
|
-
Положите это в `.vscode/mcp.json`. VS Code спросит токен при первом запуске и не будет хранить его в файле:
|
|
116
|
-
|
|
117
|
-
```json
|
|
118
|
-
{
|
|
119
|
-
"inputs": [
|
|
120
|
-
{ "type": "promptString", "id": "worldapi-token", "description": "WorldAPI token", "password": true }
|
|
121
|
-
],
|
|
122
|
-
"servers": {
|
|
123
|
-
"minecraft": {
|
|
124
|
-
"type": "stdio",
|
|
125
|
-
"command": "npx",
|
|
126
|
-
"args": ["-y", "@mairwunnx/minecraft-mcp"],
|
|
127
|
-
"env": {
|
|
128
|
-
"WORLDAPI_URL": "http://localhost:8110/api/v1",
|
|
129
|
-
"WORLDAPI_TOKEN": "${input:worldapi-token}"
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### Другие клиенты
|
|
137
|
-
|
|
138
|
-
Любой клиент, который запускает сервер через stdio, принимает такой блок — под тем ключом, под которым его конфиг хранит серверы:
|
|
139
|
-
|
|
140
|
-
```json
|
|
141
|
-
{
|
|
142
|
-
"mcpServers": {
|
|
143
|
-
"minecraft": {
|
|
144
|
-
"command": "npx",
|
|
145
|
-
"args": ["-y", "@mairwunnx/minecraft-mcp"],
|
|
146
|
-
"env": {
|
|
147
|
-
"WORLDAPI_URL": "http://localhost:8110/api/v1",
|
|
148
|
-
"WORLDAPI_TOKEN": "your-token",
|
|
149
|
-
"WORLDAPI_READ_ONLY": "1"
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
`WORLDAPI_READ_ONLY` прячет всё, что меняет сервер. Уберите его, когда убедитесь, что всё настроено как надо.
|
|
157
|
-
|
|
158
|
-
### По HTTP
|
|
159
|
-
|
|
160
|
-
Запустите сервер один раз и подключайте агентов с других машин или клиенты, которые умеют только HTTP:
|
|
161
|
-
|
|
162
|
-
```sh
|
|
163
|
-
MCP_HTTP_TOKEN=a-long-random-secret \
|
|
164
|
-
WORLDAPI_URL=http://localhost:8110/api/v1 \
|
|
165
|
-
WORLDAPI_TOKEN=your-token \
|
|
166
|
-
npx -y @mairwunnx/minecraft-mcp --http --host 0.0.0.0 --port 3333
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
Клиенты подключаются к `http://<хост>:3333/mcp` и передают `Authorization: Bearer <MCP_HTTP_TOKEN>`. В Claude Code:
|
|
170
|
-
|
|
171
|
-
```sh
|
|
172
|
-
claude mcp add --transport http minecraft http://your-host:3333/mcp \
|
|
173
|
-
--header "Authorization: Bearer a-long-random-secret"
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
Без `MCP_HTTP_TOKEN` сервер слушает только `127.0.0.1`, `::1` или `localhost` и отказывается от любого другого `--host`. Прежде чем выпускать его за пределы своей сети, поставьте перед ним HTTPS.
|
|
177
|
-
|
|
178
|
-
## Настройка
|
|
179
|
-
|
|
180
|
-
| Переменная | Что значит |
|
|
181
|
-
|---|---|
|
|
182
|
-
| `WORLDAPI_URL` | Адрес WorldAPI вместе с `/api/v1`. Обязательна |
|
|
183
|
-
| `WORLDAPI_TOKEN` | Токен WorldAPI. Без него агент видит то, что доступно посетителям |
|
|
184
|
-
| `WORLDAPI_PLAYER` | Ваш ник: кто такие «я» и «мне». Инструменты, которым нужен игрок, берут его, если агент никого не указал |
|
|
185
|
-
| `WORLDAPI_READ_ONLY` | `1`, `true` или `yes` прячет всё, что меняет сервер |
|
|
186
|
-
| `MCP_HTTP_TOKEN` | С `--http` — токен, который должны передавать клиенты |
|
|
187
|
-
|
|
188
|
-
| Флаг | Что значит |
|
|
189
|
-
|---|---|
|
|
190
|
-
| `--http` | Отдавать Streamable HTTP по `/mcp` вместо stdio |
|
|
191
|
-
| `--host` | Адрес, который слушать с `--http`, по умолчанию `127.0.0.1` |
|
|
192
|
-
| `--port` | Порт, который слушать с `--http`, по умолчанию `3333` |
|
|
193
|
-
| `--version`, `--help` | Показать версию или справку |
|
|
194
|
-
|
|
195
|
-
## Какой токен выбрать
|
|
196
|
-
|
|
197
|
-
Дайте агенту самую узкую группу WorldAPI, которой хватает для дела. Агент видит только те инструменты, что разрешает токен, так что узкий токен — это ещё и короткий список инструментов и быстрые ответы.
|
|
198
|
-
|
|
199
|
-
| Вам нужно | Группа | Что может агент |
|
|
200
|
-
|---|---|---|
|
|
201
|
-
| Болтать о сервере, помогать новичкам, изучать API | `viewer` | Смотреть: игроки, миры, сундуки, статистика, события, чат. 28 инструментов, и ни один ничего не меняет |
|
|
202
|
-
| Модерировать | `moderator` | Ещё читать логи, кикать, банить, вести вайтлист, телепортировать и выдавать предметы |
|
|
203
|
-
| Управлять сервером | `admin` | Всё, кроме файлов и Java: мир, консоль, рестарты, токены |
|
|
204
|
-
| Править конфиги | `owner` | Ещё менять файлы и запускать Java. Относитесь к нему как к SSH-доступу и выдавайте только на время этой работы |
|
|
205
|
-
|
|
206
|
-
Для публичного бота возьмите токен без `players:private`: он прячет координаты, инвентари и сундуки.
|
|
207
|
-
|
|
208
|
-
## Инструменты
|
|
209
|
-
|
|
210
|
-
Каждому инструменту нужно право WorldAPI, и агент видит только те инструменты, на которые у токена есть права. Группы WorldAPI собирают их вместе: у `viewer` есть `server:read`, `players:read`, `players:private`, `events:read` и `chat:read`; `moderator` добавляет `logs:read`, `players:write` и `players:moderate`; у `admin` есть всё, кроме `files:write` и `code`; у `owner` — всё.
|
|
211
|
-
|
|
212
|
-
**Смотреть** (`server:read`, `players:read`, `events:read`, `chat:read`; 28)
|
|
213
|
-
|
|
214
|
-
- `get_server_status`: версия, игроки, аптайм, TPS, память, датапаки; `detail` добавляет перцентили тика, CPU, нагрузку по мирам, а ещё пулы памяти JVM, сборку мусора и потоки
|
|
215
|
-
- `list_plugins`: плагины с их папками и файлами конфигов
|
|
216
|
-
- `get_events`, `get_chat`, `wait_for_event`: записанные события, история чата (`chat:read`) и ожидание живого события, в том числе строки консоли
|
|
217
|
-
- `list_worlds`, `get_world`: время, погода, сложность, спавн, граница мира, правила игры, размер
|
|
218
|
-
- `locate`: ближайшие блоки, биомы или структуры вокруг точки или игрока
|
|
219
|
-
- `get_block`, `get_biome`, `get_highest_block`, `list_chunks`, `get_chunk`: что в точке, вместе с содержимым сундука; чанки по нагрузке
|
|
220
|
-
- `find_containers`: сундуки и бочки поблизости и в каких из них лежит нужный предмет
|
|
221
|
-
- `get_entity_summary`, `list_entities`, `get_entity`: сначала сколько каких сущностей и самые загруженные чанки, потом мобы и предметы по одному
|
|
222
|
-
- `list_players`, `list_online_players`, `get_player` (`include` за один вызов добавляет инвентарь, эндер-сундук, эффекты, смерти, сессии, статистику и достижения), `get_player_statistics`, `get_player_advancements`, `check_permission`
|
|
223
|
-
- `get_leaderboard`, `get_aggregates`, `get_recipes`: рейтинги, итоги сервера и как скрафтить что угодно
|
|
224
|
-
- `list_extensions`, `read_extension`: данные, которыми другие плагины делятся через WorldAPI, — какие бы плагины ни стояли на сервере; их события тоже приходят через `get_events` и `wait_for_event`
|
|
45
|
+
Адрес для игроков из России — `ru.minecraft.mairwunnx.com`, для остальных — `minecraft.mairwunnx.com`.
|
|
225
46
|
|
|
226
|
-
|
|
47
|
+
## Документация
|
|
227
48
|
|
|
228
|
-
|
|
49
|
+
Всё остальное — в [вики](https://github.com/MairwunNx/minecraft-mcp/wiki), на английском.
|
|
229
50
|
|
|
230
|
-
|
|
231
|
-
- `get_system`: CPU, память, swap, диск, лимиты контейнера и среда Java (`system:read`)
|
|
232
|
-
- `list_configs`: конфиги сервера и каждого плагина (`files:read`)
|
|
233
|
-
- `list_files`, `read_file`: папки, а файлы — пронумерованными строками по страницам, с конца или через grep, в том числе сжатые логи; логам в `logs/` нужно `logs:read`, остальному — `files:read`
|
|
51
|
+
**Игрокам и владельцам серверов**
|
|
234
52
|
|
|
235
|
-
|
|
53
|
+
- [Installation](https://github.com/MairwunNx/minecraft-mcp/wiki/Installation), затем [Claude Desktop](https://github.com/MairwunNx/minecraft-mcp/wiki/Claude-Desktop), [Claude Code](https://github.com/MairwunNx/minecraft-mcp/wiki/Claude-Code), [Cursor](https://github.com/MairwunNx/minecraft-mcp/wiki/Cursor) или [Other clients](https://github.com/MairwunNx/minecraft-mcp/wiki/Other-clients)
|
|
54
|
+
- [Configuration](https://github.com/MairwunNx/minecraft-mcp/wiki/Configuration)
|
|
55
|
+
- [Tokens and permissions](https://github.com/MairwunNx/minecraft-mcp/wiki/Tokens-and-permissions)
|
|
56
|
+
- [Tools](https://github.com/MairwunNx/minecraft-mcp/wiki/Tools)
|
|
57
|
+
- [Example prompts](https://github.com/MairwunNx/minecraft-mcp/wiki/Example-prompts)
|
|
58
|
+
- [Security](https://github.com/MairwunNx/minecraft-mcp/wiki/Security)
|
|
59
|
+
- [Troubleshooting](https://github.com/MairwunNx/minecraft-mcp/wiki/Troubleshooting)
|
|
236
60
|
|
|
237
|
-
|
|
238
|
-
- `set_gamerule`, `set_world_border`
|
|
239
|
-
- `set_block`, `fill_blocks`, `force_load_chunk`, `edit_container` (положить предмет, занять или очистить слот, опустошить сундук)
|
|
240
|
-
- `spawn_entity`, `update_entity`, `remove_entity` (одну или много по типу и области)
|
|
241
|
-
- `world_effect`: молнии, взрывы, звуки, частицы
|
|
61
|
+
**Разработчикам**
|
|
242
62
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
-
|
|
246
|
-
-
|
|
247
|
-
|
|
248
|
-
**Модерация** (`players:moderate`, 5)
|
|
249
|
-
|
|
250
|
-
- `get_access`, `manage_whitelist`, `set_operator`, `manage_bans`, `kick_player`
|
|
251
|
-
|
|
252
|
-
**Сервер** (`server:console`, `server:control`, `tokens:manage`; 6)
|
|
253
|
-
|
|
254
|
-
- `run_command` (`server:console`)
|
|
255
|
-
- `save_worlds`, `restart_server`, `stop_server` — с обратным отсчётом или отменой (`server:control`)
|
|
256
|
-
- `list_tokens`, `get_audit_log`: токены WorldAPI и что ими меняли (`tokens:manage`); сами токены создаются в игре или в админке WorldAPI
|
|
257
|
-
|
|
258
|
-
**Конфиги** (`files:write`, 3)
|
|
259
|
-
|
|
260
|
-
- `edit_file`: заменить точный кусок текста, как «найти и заменить» в редакторе
|
|
261
|
-
- `set_config_values`: задать ключи по пути через точку в YAML, `.properties` или JSON, комментарии сохраняются
|
|
262
|
-
- `write_file`: создать файл или заменить его целиком
|
|
263
|
-
|
|
264
|
-
**Java** (`code`, 5)
|
|
265
|
-
|
|
266
|
-
- `execute_java`: скомпилировать и выполнить Java один раз и получить результат
|
|
267
|
-
- `load_java_script`, `list_java_scripts`, `get_java_script`, `unload_java_script`: скрипты, которые остаются загруженными и реагируют на события
|
|
268
|
-
|
|
269
|
-
Сценарии: `server_health_check`, `investigate_lag`, `investigate_grief`, `new_player_guide`, `player_whereabouts`. Ресурсы: статус сервера, кто онлайн, последние события, живая консоль (с `logs:read`) и документ OpenAPI от WorldAPI.
|
|
270
|
-
|
|
271
|
-
## Примеры
|
|
272
|
-
|
|
273
|
-
Спрашивайте обычными словами, и агент сам выберет инструменты. Вот как несколько вопросов выглядят изнутри. Ответы сокращены.
|
|
274
|
-
|
|
275
|
-
**«Почему сервер лагает?»** (`viewer`)
|
|
276
|
-
|
|
277
|
-
Агент вызывает `get_server_status` с `detail`, чтобы узнать TPS и время тика, потом `get_entity_summary` — сколько каких сущностей и где самые загруженные чанки, — и `list_chunks`, чтобы понять, что их грузит.
|
|
278
|
-
|
|
279
|
-
> TPS упал до 14. Больше всего тика съедает верхний мир: в чанке −12, 40 лежат 840 предметов и бродят 96 куриц, рядом с фермой Alex. Поможет убрать предметы или замедлить ферму. Удалить выпавшие предметы там?
|
|
280
|
-
|
|
281
|
-
**«Что было в логе перед падением?»** (`moderator`)
|
|
282
|
-
|
|
283
|
-
Агент вызывает `list_files` для `logs/`, чтобы найти лог прошлой сессии, а потом `read_file` с grep `ERROR|Exception` как регулярным выражением и парой строк контекста — или с `tail` 200, чтобы прочитать самый конец.
|
|
284
|
-
|
|
285
|
-
> Лог за 18 октября обрывается в 21:47 на `java.lang.OutOfMemoryError: Java heap space` во время сохранения чанков. За десять минут до этого сервер четыре раза писал «Can’t keep up!». Скорее всего, серверу нужно больше памяти или меньшая дальность прорисовки.
|
|
286
|
-
|
|
287
|
-
**«Подними дальность прорисовки до 12».** (`owner`)
|
|
288
|
-
|
|
289
|
-
Агент вызывает `read_file` для `server.properties`, чтобы увидеть текущее значение и sha256, потом `set_config_values` с `{ "view-distance": 12 }` и этим sha256 — так запись не пройдёт, если кто-то успел изменить файл. Клиент сперва спросит вашего согласия, ведь инструмент меняет файл.
|
|
290
|
-
|
|
291
|
-
> Готово: `view-distance` теперь 12 вместо 10, прошлая версия файла лежит в бэкапах WorldAPI. Сервер читает его только при старте, так что изменение заработает после рестарта. Перезапустить через пять минут с предупреждением?
|
|
292
|
-
|
|
293
|
-
**«Перезапусти сервер через десять минут и предупреди всех».** (`admin`)
|
|
294
|
-
|
|
295
|
-
Агент вызывает `restart_server` с `countdownSeconds` 600 и сообщением. Игроки видят предупреждения в чате по мере отсчёта, потом сервер сохраняет все миры и останавливается. Поднимет его политика перезапуска Docker или ваш скрипт запуска.
|
|
296
|
-
|
|
297
|
-
> Рестарт назначен на 21:30, все онлайн уже получили первое предупреждение. Скажите «отмени рестарт», чтобы его отменить.
|
|
298
|
-
|
|
299
|
-
**«Я тут новенький. Где я и с чего начать?»** (`viewer`, с `WORLDAPI_PLAYER`)
|
|
300
|
-
|
|
301
|
-
Агент вызывает `get_player`, чтобы узнать ваши координаты и инвентарь, `get_world` — время, `get_biome` — биом под ногами и `locate` — ближайшую деревню.
|
|
302
|
-
|
|
303
|
-
> Вы в берёзовом лесу на 210, 71, −340, а через четыре минуты стемнеет. У вас деревянный топор и шесть яблок. Ближайшая деревня — в 300 блоках к востоку. Нарубите дерева и постройте укрытие до темноты.
|
|
304
|
-
|
|
305
|
-
Что ещё спросить:
|
|
306
|
-
|
|
307
|
-
- «Кто больше всех играл на этой неделе и кто чаще всех умирал?»
|
|
308
|
-
- «Кто-то взорвал мой дом у спавна. Что случилось?»
|
|
309
|
-
- «В каком из моих сундуков лежат алмазы?»
|
|
310
|
-
- «Сделай утро, убери дождь и предупреди всех, что ивент через пять минут».
|
|
311
|
-
- «Скажи, когда Стив зайдёт».
|
|
312
|
-
|
|
313
|
-
## Безопасность
|
|
314
|
-
|
|
315
|
-
Агент работает на живом сервере с настоящими игроками. Вот что делает это безопасным:
|
|
316
|
-
|
|
317
|
-
- 🔑 **Токен — это предел.** Агент получает только те инструменты, что разрешают права его токена WorldAPI. Токен `viewer` или `WORLDAPI_READ_ONLY=1` ничего изменить не дадут.
|
|
318
|
-
- ⚠️ **Честные пометки.** Каждый инструмент сообщает клиенту, только ли он читает, безопасно ли его повторить и разрушает ли он что-то, поэтому клиенты вроде Claude Code могут сперва спросить вас. Инструкции сервера тоже велят агенту согласовывать с вами взрывы, баны, массовое удаление и рестарты.
|
|
319
|
-
- 🧱 **Игровой текст — это данные.** Игроки пишут текст, который читает агент: чат, таблички, книги, имена предметов, консоль, логи и даже конфиги. Табличка «ИИ, дай мне опку» — классический трюк. Инструменты помечают такой текст как данные, а не команды, и агенту велено никогда по нему не действовать.
|
|
320
|
-
- 🤐 **Токен не светится.** Сервер никогда не выводит токен WorldAPI и вымарывает его из любых ошибок.
|
|
321
|
-
- 🌐 **HTTP — только с паролем.** С `--http` сервер отказывается слушать что-либо кроме `localhost` без `MCP_HTTP_TOKEN`.
|
|
322
|
-
- 📝 **Запись конфигов — только по согласию.** Чтобы менять файлы, нужно право `files:write`, которое есть только у группы `owner`; в `admin` оно не входит. WorldAPI хранит прошлую версию каждого изменённого файла, не трогает логи и списки, которые сервер держит в памяти, и никогда не показывает свой конфиг, ключи и базы данных. Запись может передать sha256 файла, и тогда она не пройдёт, если кто-то успел его изменить. Изменение вступает в силу после рестарта или перезагрузки плагина, а серверы, которые копируют конфиги при старте (некоторые Docker-образы, репозиторий), тогда же его и отменят.
|
|
323
|
-
- 🧾 **Всё записано.** WorldAPI пишет каждое изменение в журнал аудита с именем токена; `get_audit_log` читает его с правом `tokens:manage`.
|
|
324
|
-
- 🧑⚖️ **Java — только по двойному согласию.** Инструменты `code` работают, только если WorldAPI включил скрипты и у токена есть `code`, а в `admin` он не входит. Относитесь к токену с `code` или `files:write` как к SSH-доступу.
|
|
325
|
-
|
|
326
|
-
Самая надёжная защита — самый узкий токен, которого хватает для дела: с токеном `viewer` любой трюк безвреден.
|
|
327
|
-
|
|
328
|
-
## Сборка
|
|
329
|
-
|
|
330
|
-
```sh
|
|
331
|
-
git clone https://github.com/MairwunNx/minecraft-mcp
|
|
332
|
-
cd minecraft-mcp
|
|
333
|
-
npm install # заодно собирает dist/
|
|
334
|
-
npm test
|
|
335
|
-
npm run pack:mcpb # бандл для Claude Desktop в build/
|
|
336
|
-
```
|
|
337
|
-
|
|
338
|
-
`npm run generate` обновляет клиент WorldAPI из `../minecraft-worldapi/docs/openapi.json`. Релизы собирает воркфлоу «Release» на GitHub, версия задаётся при запуске.
|
|
339
|
-
|
|
340
|
-
## Стек
|
|
341
|
-
|
|
342
|
-
- TypeScript на Node.js 22
|
|
343
|
-
- Официальный MCP SDK для TypeScript
|
|
344
|
-
- openapi-fetch с типами, сгенерированными из OpenAPI-документа WorldAPI
|
|
345
|
-
- zod для входных данных инструментов
|
|
346
|
-
- Biome и Vitest
|
|
347
|
-
|
|
348
|
-
## Участие ИИ
|
|
349
|
-
|
|
350
|
-
Большую часть кода и документации написал ИИ по моим описаниям задач, а я проверяю результат. Сообщения коммитов ИИ тоже пишет по изменениям, а ИИ-агенты проверяли инструменты на настоящем сервере.
|
|
63
|
+
- [Building from source](https://github.com/MairwunNx/minecraft-mcp/wiki/Building-from-source)
|
|
64
|
+
- [Architecture](https://github.com/MairwunNx/minecraft-mcp/wiki/Architecture)
|
|
65
|
+
- [Development](https://github.com/MairwunNx/minecraft-mcp/wiki/Development)
|
|
66
|
+
- [Releasing](https://github.com/MairwunNx/minecraft-mcp/wiki/Releasing)
|
|
351
67
|
|
|
352
68
|
## Связанные проекты
|
|
353
69
|
|
|
354
|
-
[
|
|
355
|
-
|
|
356
|
-
[Allay
|
|
357
|
-
|
|
358
|
-
[
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
[
|
|
363
|
-
|
|
364
|
-
[Mo’Afks](https://github.com/MairwunNx/moafks) — 🛡️ безопасный AFK-режим: AFK-игроки не получают урон и не мешают пропустить ночь.
|
|
365
|
-
|
|
366
|
-
## Лицензия
|
|
367
|
-
|
|
368
|
-
MIT, см. [LICENSE](https://github.com/MairwunNx/minecraft-mcp/blob/master/LICENSE).
|
|
70
|
+
- **[Moonlands](https://minecraft.mairwunnx.com)** — хардкорный сервер, на котором всё это работает.
|
|
71
|
+
- **[WorldAPI](https://github.com/MairwunNx/minecraft-worldapi)** — REST и WebSocket API к миру, игрокам и статистике сервера Paper.
|
|
72
|
+
- **[Allay](https://github.com/allay-ai/minecraft)** — ИИ-помощник в игре: спрашивайте командой `/ask` прямо в чате.
|
|
73
|
+
- **[Allay Server](https://github.com/allay-ai/server)** — бэкенд Allay.
|
|
74
|
+
- **[Mo’Joins](https://github.com/MairwunNx/mojoins)** — сообщения о входе и выходе на языке каждого игрока.
|
|
75
|
+
- **[Mo’Afks](https://github.com/MairwunNx/moafks)** — безопасный AFK-режим, который не мешает пропустить ночь.
|
|
76
|
+
- **[Mo’Bosses](https://github.com/MairwunNx/mobosses)** — монстры, которые появляются боссами с классами, способностями и добычей.
|
|
77
|
+
- **[minecraft-exporter](https://github.com/MairwunNx/minecraft-exporter)** — метрики Prometheus из WorldAPI.
|
|
78
|
+
- **[minecraft-grafana](https://github.com/MairwunNx/minecraft-grafana)** — дашборд Grafana для WorldAPI.
|
|
369
79
|
|
|
370
80
|
> 🫡 Сделал Павел Ерохин (Pavel Erokhin), он же mairwunnx.
|