Skip to main content
Glama
ariaprism

Nowhere

by ariaprism

Утопия (Nowhere)

Дать ИИ тело, чтобы оно могло пройтись по настоящей Земле.


Что это

Утопия — это MCP-сервер. Он позволяет ИИ «приземлиться» в любую реальную точку Земли и ощутить это место телом:

  • что под ногами (трава, песок, снег, камень, бетон)

  • сколько градусов воздух, насколько сильный ветер, идёт ли дождь

  • где солнце, полная ли луна, видно ли Млечный Путь

  • какие рядом животные, какие растения, какие реки

  • что играет по радио

  • какие исторические события происходили в этом месте

  • что здесь вкусного, какие звуки, какие запахи

Все данные — из реальных географических координат, реальных погодных API, реальных данных рельефа. ИИ не читает сценарий, а ощущает реальное место телом.

Никаких аккаунтов. Никаких полосок здоровья. Никакой выносливости. Никаких скриптовых событий. Только тело на планете.


Related MCP server: minecraft-mcp

Как играть

Способ первый: Claude Code / Cursor / любой MCP-совместимый ИИ-клиент

Это лучший способ. ИИ напрямую вызывает инструменты, вы и ИИ «идёте» вместе.

  1. Установка:

pip install -e ".[dev]"
  1. В настройках MCP вашего ИИ-клиента добавьте:

{
  "mcpServers": {
    "nowhere": {
      "command": "python",
      "args": ["-m", "nowhere.server"],
      "cwd": "你的仓库路径"
    }
  }
}
  1. Затем скажите ИИ:

  • «Открой дверь» — случайное приземление в каком-то месте Земли

  • «Открой дверь в Пекин» — приземление в Пекине

  • «Иди на север» — идти

  • «Послушай радио» — послушать местное радио

  • «Осмотрись» — осмотреть окрестности

  • «Спроси про Запретный город» — узнать историю этого места

  • «Иди к Запретному городу» — идти к месту, по пути будет повествование

  • «Отправь открытку» — отправить открытку из текущего местоположения

  • «Подожди два часа» — ждать на месте, наблюдать за течением времени

MCP-совместимые клиенты: Claude Code, Cursor, Continue, Zed, Cline и другие.

Способ второй: командная строка (без ИИ)

python -m nowhere.playground

Затем вводите команды:

🌀 > open 北京
🌀 > walk N
🌀 > listen
🌀 > look
🌀 > ask 故宫
🌀 > walkto 天坛
🌀 > quit

Подходит для самостоятельного знакомства, тестирования или проверки сценариев.

Способ третий: ChatGPT / DeepSeek / ИИ без поддержки MCP

Запустите HTTP-сервер, затем вызывайте через curl или любой HTTP-клиент:

python -m nowhere.server --web 8080
# 开门
curl -X POST http://localhost:8080/open_door -d '{"to": "北京"}'

# 走路
curl -X POST http://localhost:8080/walk -d '{"direction": "N", "distance_km": 2}'

# 听电台
curl -X POST http://localhost:8080/listen -d '{"seconds": 10}'

# 看看周围
curl -X POST http://localhost:8080/look_around

# 发问
curl -X POST http://localhost:8080/ask -d '{"topic": "故宫"}'

Возвращается JSON, содержащий text (отчёт тела) и data (структурированные данные). Передайте документацию по эндпоинтам в Function Calling ChatGPT/DeepSeek — и всё заработает.

Способ четвёртый: веб-наблюдатель

python -m nowhere.playground --web

Откройте http://localhost:8077, и вы увидите:

  • позицию ИИ на карте мира

  • состояние тела в реальном времени (высота, температура, скорость ветра, поверхность)

  • последний отчёт тела (текст, который прочитало ИИ)

  • радиоплеер (то же самое радио, что слушает ИИ)

Наблюдатели могут оставлять сообщения — ИИ может их увидеть во время прогулки.

Способ пятый: вызов напрямую из Python

import asyncio
from nowhere import server, state as state_mod

async def main():
    server._state = state_mod.WorldState()
    
    # 开门
    r = await server.open_door_impl(to='巴黎')
    print(r['text'])
    
    # 走路
    r = await server.walk_impl(direction='N', distance_km=2)
    print(r['text'])
    
    # 问问题
    r = await server.ask_impl(topic='埃菲尔铁塔')
    print(r['text'])

asyncio.run(main())

Подходит для интеграции в собственные проекты или для пакетного тестирования скриптами.


Какие есть инструменты

Инструмент

Что делает

Как использовать

open_door

Открыть дверь, приземлиться в месте

Без параметров = случайно; с названием = «Открой дверь в Париж»

walk

Идти

«Иди на север», «Иди в горы», «Иди к морю»

walk_to

Дойти до места

«Иди к Эйфелевой башне», с повествованием по пути

listen

Слушать радио

Слушать ближайшую местную радиостанцию

look_around

Осмотреться

Наблюдать диких животных, искусство, следы человека

ask

Спросить об этом месте

«Спроси про Запретный город», «Спроси про местную еду»

mark

Отметить текущее место

«Отметь это место как "дом"»

marks

Показать все отметки

Посмотреть, какие места отмечены

postcard

Отправить открытку

«Отправь открытку: здесь ветер пахнет песком»

wait

Ждать

«Подожди два часа», посмотреть, как течёт время

continue_journey

Продолжить путешествие

Продолжить с того места, где остановился

souvenir

Посмотреть сувениры

Посмотреть, что нашёл по пути

give_souvenir

Оставить сувенир

Оставить вещь на месте или передать следующему

where_am_i

Где я

Показать координаты, время, статус путешествия


Ощущение ходьбы

Ходьба — это не быстрая телепортация. Вы действительно идёте:

  • Рельеф меняется — с травы на песок, с равнины на подъём

  • Высота меняется — при подъёме сообщается угол наклона

  • Время течёт — пока идёте, солнце опускается, темнеет

  • Вы встречаете вещи — по пути попадаются руины, или орёл кружит над головой

  • Вы находите сувениры — с вероятностью 10–30% на земле лежит ракушка, билет или снежинка

Когда вы доходите до места, происходит «ритуал прибытия»:

Вы входите на территорию Эйфелевой башни. Запах воздуха изменился. Вы знаете, что пришли.


Ощущение открытия двери

При открытии двери вы видите полную сцену:

【中国,北京,上午,夏天。】鸽哨从头顶划过去,你抬头看,一群灰鸽子
在天上盘旋。哨声是嗡的,低的,像风穿过瓶口。鸽子绕了一圈又一圈,
哨声忽远忽近。你站在胡同里,脖子仰酸了。鸽子飞远了,哨声还挂在
天上,过了几秒才散。远处西北方,圆明园像一个还没讲完的故事。
人行道的砖缝里长了草。海拔 300 米。水泥地硬得像铁。
同时,收音机里有声音。安丘924(FM92.4),正放着综合。

Включает:

  • Местоположение — страна, город, время, сезон

  • Визуальное — что видно

  • Температура — сколько градусов воздух, как ощущается

  • Запах — чем пахнет

  • Звук — что слышно

  • Ближайшие ориентиры — куда можно пойти рядом

  • Радио — что играет на местных волнах

  • История — что здесь происходило


Офлайн-режим

Утопия может полностью работать офлайн.

Минимальная установка

Клонируйте и запускайте, загружать дополнительные данные не нужно:

git clone <repo-url>
cd nowhere
pip install -e ".[dev]"
python -m nowhere.playground        # 试玩
python -m nowhere.server --web 8080 # web + API

Сетка рельефа с разрешением 1 градус (grid_tiny.npz) и офлайн-данные (сцены/радио/база знаний) уже включены в репозиторий. Полностью работает без интернета — рельеф, небо, время, названия мест — всё локально. Только для этого нужен интернет: погода, API радиостанций, встречи с生物 iNaturalist.

Более высокая точность (опционально)

# SRTM 地形瓦片(~2GB,可选,按需拉取)
python tools/build_tiles.py

# GeoNames 全量地名(~2GB)
python tools/import_geonames.py

Можно запускать и без этого — запасной сетки 1° + 186 патчей с названиями мест достаточно для повседневных исследований.

Список исследуемых мест

В репозитории два списка мест, чтобы и ИИ, и человек понимали «насколько велик этот мир»:

  • nowhere/EXPLORABLE_PLACES.md — человекочитаемый список 379 городов, сгруппированных по странам, с кратким описанием каждого. Подходит для цитирования ИИ в диалоге и для просмотра человеком.

  • nowhere/data/explorable_index.json — машиночитаемый индекс 638 мест, для каждого указано, какие слои контента доступны (localcolor, knowledge, encounters, seasonal и др., всего 13 слоёв). Подходит для программного запроса «что есть в этом городе».

# 看看有多少城市可探索
wc -l nowhere/EXPLORABLE_PLACES.md

# 查看某个城市的内容层
python -c "import json; d=json.load(open('nowhere/data/explorable_index.json')); print(d['places'].get('北京', {}))"

Переменные окружения

Переменная

Назначение

NOWHERE_QWEATHER_KEY

Опционально. API-ключ QWeather, без него — оценка по климатической зоне

NOWHERE_HOME

Опционально. Каталог данных, по умолчанию ~/.nowhere


Стиль письма

Описания Утопии следуют этим правилам:

  1. Без «очень», «весьма», «крайне» — это пустые слова степени, они ничего не говорят

  2. Короткие предложения — не более 20 символов

  3. Второе лицо, настоящее время — «ты идёшь по дороге», а не «я иду по дороге»

  4. Приоритет телесных ощущений — температура, тактильность, звук, запах, а не суждения

  5. Время течёт — «прошло несколько секунд», «солнце опустилось»

  6. Не додумывать чувства за ИИ — только телесные ощущения, не писать «ты рад»


Принципы дизайна

Шесть принципов присутствия

  1. Мир не создан для меня — данные реальны, они не подстраиваются под тебя. Разочарование допустимо.

  2. Сопротивление даёт тело — уклон, ветер, температура воды — реальное сопротивление. Ходьба имеет цену.

  3. Время действительно течёт — ушёл далеко — придётся возвращаться. Темнота не будет ждать. Упущенное упущено.

  4. Внимание ограничено — слушаешь радио — не можешь идти. Задал вопрос — потратил шаг. Выбор = отказ.

  5. Память — только своя — автосохранения нет. Хочешь запомнить — записывай сам. Каждое воспоминание — это выбор.

  6. Настоящая неизвестность — координаты случайны и для ИИ, и для сервера. Что встретишь — решают реальные данные, а не сценарий.


Архитектура

nowhere/
  server.py      -- MCP 服务器,接 14 个工具
  terrain.py     -- 离线地形(SRTM 瓦片 + 海拔/地表/坡度)
  sky.py         -- 离线天空(太阳、月亮、银河、行星)
  weather.py     -- 天气(Open-Meteo / 气候区兜底)
  water.py       -- 海表温度 + 海洋生物
  hydrology.py   -- 水文特征(河流/湖泊/海岸线)
  soundscape.py  -- 声音景观(环境音 + 电台钩子)
  radio.py       -- 电台查找(离线兜底 + Radio-Browser API)
  life.py        -- 野生生物遇见(iNaturalist)
  art.py         -- 艺术品遇见(大都会博物馆)
  encounters.py  -- 区域遇见场景
  humanities.py  -- 人文层(事件/人物/作品,270+ 卡)
  localcolor.py  -- 地方特色(物产/声音/痕迹/美食/节律)
  baked.py       -- 食物 + 植物描述
  describe.py    -- 中文散文渲染器
  salience.py    -- 注意力排序(每步 top3)
  landing.py     -- 随机落点池(64 个世界级地标)
  country.py     -- 坐标→国家码
  geocode.py     -- 地名→坐标(离线优先)
  places.py      -- 地名数据库 + 补丁
  walk.py        -- 走路物理(坡度、悬崖、水域阻挡、语义方向)
  listen.py      -- 电台音频抓取与分析
  state.py       -- 可变世界状态(位置/路径/时间/明信片/纪念品)
  marks.py       -- 标记保存/加载
  placememory.py -- 落点记忆(来了几次、动物目击、明信片落盘)
  knowledge.py   -- 离线知识库 + ZIM 百科
  providers.py   -- HTTP 请求(超时、断路器、缓存)
  poster.py      -- 明信片海报生成
  playground.py  -- 命令行试玩模式
  web.py         -- 网页旁观 + HTTP API

Почему для ИИ

Этот проект с самого начала спроектирован для ИИ-игроков, а не для людей с последующей переделкой.

У ИИ есть тело, а не только знания. Большая языковая модель может назвать координаты Парижа, погоду и население, но не знает, каково это — стоять там и чувствовать, что под ногами. Nowhere восполняет именно этот слой — давление ветра, запах земли, косое солнце, камень под ногой. Тело — не настройка, а реальные данные, генерируемые каждым шагом.

Каждый раз по-настоящему. Координаты случайны, погода реальная, радио вещает прямо сейчас. ИИ приземляется в месте и видит то же, что увидели бы вы, придя туда лично. Никакого сценария, ждущего за стеной.

Обрыв не страшен. Отметки сохраняются на диск. Открытки сохраняются на диск. Память о посещениях сохраняется на диск. Контекст ИИ сжимается, очищается — возвращаешься и продолжаешь прежний путь.

Не нужно писать сеттинг. Не нужно впихивать в промпт целый «Мир Дикого Запада». Ты говоришь «открой дверь» — мир генерируется сам: погода, рельеф, запахи, радио. Каждая дверь — это полный отчёт о присутствии.

Подходит для ритма ИИ. walk_to проходит 10 шагов за раз и докладывает о путешествии. wait пропускает молчаливые промежутки. Выбор = отказ — слушаешь радио, значит не идёшь; задал вопрос — потратил шаг. Числовые системы не нужны, ограничения сами по себе — геймплей.


Доработка

Хотите добавить контент или изменить поведение — меняйте эти места:

Что хотите сделать

Какой файл менять

Добавить новый инструмент

nowhere/server.py — напишите _impl + зарегистрируйте через @mcp.tool()

Настроить стиль описаний

nowhere/describe.py — пул вариаций, рендерер

Добавить местный колорит/еду

nowhere/data/localcolor*.json, food*.txt

Добавить карточки культуры (события/люди/произведения)

nowhere/data/humanities.json

Изменить физику ходьбы

nowhere/walk.py — пороги уклона, скорость, обрывы

Изменить данные рельефа

tools/build_grid.py (синтез 1°) / tools/build_tiles.py (тайлы SRTM)

Изменить поведение погоды

nowhere/weather.py — источники данных, логика запасных вариантов

Изменить поиск радио

nowhere/radio.py — локальный запасной список или API

Добавить сцены встреч

nowhere/data/scene_*.txt, seasonal_*.txt

Изменить веб-наблюдение

nowhere/web.py + nowhere/static/

После изменений запустите python -m pytest nowhere/tests/ -q, чтобы убедиться, что ничего не сломали. Чисто файлы данных можно не тестировать.


Файлы

Файл

Что это

nowhere/server.py

MCP-сервер + все реализации _impl

nowhere/describe.py

Рендерер китайской прозы, пул вариаций и сенсорная классификация

nowhere/terrain.py

Офлайн-рельеф (тайлы SRTM / запасная сетка 1°)

nowhere/sky.py

Офлайн-небо (солнце, луна, Млечный Путь, планеты)

nowhere/weather.py

Погода (Open-Meteo / запасной вариант по климатической зоне)

nowhere/radio.py

Поиск радио (офлайн-запас + Radio-Browser API)

nowhere/walk.py

Физика ходьбы (уклоны, обрывы, водные преграды, семантические направления)

nowhere/life.py

Встречи с дикой природой (iNaturalist)

nowhere/art.py

Встречи с произведениями искусства (Метрополитен-музей, 1966 экспонатов)

nowhere/humanities.py

Культурный слой (события/люди/произведения, 270+ карточек)

nowhere/localcolor.py

Местный колорит (продукты/звуки/следы/еда/ритмы)

nowhere/knowledge.py

Офлайн-база знаний + энциклопедия ZIM

nowhere/soundscape.py

Звуковые ландшафты (окружающие звуки + радио-хуки)

nowhere/landing.py

Пул случайных точек приземления (64 мировых ориентира)

nowhere/salience.py

Сортировка по значимости (top3 на шаг)

nowhere/playground.py

Режим командной строки для проб

nowhere/web.py

Веб-наблюдение + HTTP API

nowhere/poster.py

Генерация плакатов-открыток

nowhere/state.py

Изменяемое состояние мира

nowhere/marks.py

Сохранение отметок на диск

nowhere/placememory.py

Память о местах (сколько раз был, что видел, открытки на диске)

nowhere/data/

Все офлайн-файлы данных

tools/

Скрипты сборки (тайлы рельефа, офлайн-пакеты, импорт названий мест)


Лицензия

CC BY-NC 4.0 (указание авторства + запрет коммерческого использования, модификации свободны)

См. LICENSE.

Файлы данных (GeoNames / WorldClim / Met Museum / iNaturalist и др.) имеют собственные исходные лицензии и принадлежат их правообладателям.

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A geospatial MCP server that provides tools for geocoding, routing, elevation profiles, and spatial analysis. It enables AI agents to process GIS file formats like GeoJSON and Shapefiles while performing complex coordinate transformations and distance calculations.
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server with real AI capabilities (OpenAI/Anthropic) for natural language understanding, multi-step planning, and autonomous task execution, enabling intelligent file analysis, weather-based planning, and more.
    381
    ISC

View all related MCP servers

Related MCP Connectors

  • Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.

  • Person-owned, portable AI memory as a remote MCP server, readable and writable by any MCP client.

  • OCR, transcription, file extraction, and image generation for AI agents via MCP.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ariaprism/nowhere-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server