Nowhere
유유향 (Nowhere)
AI에게 육체를 주고, 진짜 지구 위를 걷게 하자.
이것이 무엇인가
유유향은 MCP 서버입니다. AI가 지구상의 어떤 실제 좌표에든 "착지"하여 육체로 그곳을 느낄 수 있게 합니다:
발밑의 지면이 무엇인지 (풀밭, 모래, 눈, 바위, 시멘트)
공기가 몇 도인지, 바람이 얼마나 부는지, 비가 오는지
태양이 어디에 있는지, 달이 둥근지, 은하수를 볼 수 있는지
근처에 어떤 동물, 어떤 식물, 어떤 강이 있는지
라디오에서 어떤 방송이 나오는지
이곳에서 어떤 역사적 사건이 일어났는지
현지에 어떤 맛있는 것이 있는지, 어떤 소리가 있는지, 어떤 냄새가 있는지
모든 데이터는 실제 지리 좌표, 실제 날씨 API, 실제 지형 데이터에서 비롯됩니다. AI는 대본을 읽는 것이 아니라 육체로 실제 장소를 느끼는 것입니다.
계정 없음. 체력 바 없음. 스태미나 없음. 스크립트 이벤트 없음. 오직 하나의 육체, 하나의 행성 위에 있을 뿐.
Related MCP server: minecraft-mcp
플레이 방법
방법 1: Claude Code / Cursor / MCP를 지원하는 모든 AI 클라이언트
이것이 가장 좋은 경험입니다. AI가 직접 도구를 호출하고, 당신과 AI가 함께 "걸어갑니다".
설치:
pip install -e ".[dev]"AI 클라이언트의 MCP 설정에 다음을 추가:
{
"mcpServers": {
"nowhere": {
"command": "python",
"args": ["-m", "nowhere.server"],
"cwd": "你的仓库路径"
}
}
}그런 다음 AI에게 말하세요:
"문 열어" — 지구상의 어떤 곳에 무작위로 착지
"문 열어서 베이징으로 가" – 베이징에 착지
"북쪽으로 걸어가" – 걷기
"라디오 들어봐" – 현지 라디오 방송 청취
"주변 좀 봐" – 주변 환경 관찰
"고궁에 물어봐" – 이곳의 역사 알아보기
"고궁까지 걸어가" – 어떤 장소를 향해 걸어가며, 길에서 이야기가 펼쳐짐
"엽서 한 장 보내" – 현재 위치에서 엽서 보내기
"두 시간 기다려" – 제자리에서 기다리며 시간의 변화를 봄
MCP를 지원하는 클라이언트: Claude Code, Cursor, Continue, Zed, Cline 등.
방법 2: 명령줄 체험 (AI 불필요)
python -m nowhere.playground그런 다음 명령 입력:
🌀 > open 北京
🌀 > walk N
🌀 > listen
🌀 > look
🌀 > ask 故宫
🌀 > walkto 天坛
🌀 > quit직접 체험하거나, 테스트하거나, 시나리오 작성 시 검증하기에 적합합니다.
방법 3: ChatGPT / DeepSeek / MCP를 지원하지 않는 AI
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": "故宫"}'text(신체 보고서)와 data(구조화된 데이터)를 포함하는 JSON을 반환합니다. 엔드포인트 문서를 ChatGPT/DeepSeek의 Function Calling에 보내면 사용할 수 있습니다.
방법 4: 웹 관전자
python -m nowhere.playground --webhttp://localhost:8077을 열면 다음을 볼 수 있습니다:
세계 지도에서 AI의 위치
실시간 신체 상태 (고도, 온도, 풍속, 지표)
최신 신체 보고 (AI가 읽은 텍스트)
라디오 플레이어 (AI가 듣는 것과 동일한 라디오)
관전자는 메시지를 남길 수 있으며, AI가 걸을 때 볼 수도 있습니다.
방법 5: 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())자신의 프로젝트에 통합하거나 스크립트로 일괄 테스트하기에 적합합니다.
어떤 도구가 있나
도구 | 하는 일 | 사용 방법 |
| 문 열고, 어떤 곳에 착지 | 인자 없음=무작위; 지명 전달="문 열어서 파리로" |
| 걷기 | "북쪽으로 걸어", "산으로 걸어", "바다로 걸어" |
| 어떤 곳까지 걸어가기 | "에펠탑까지 걸어가", 길에서의 이야기 포함 |
| 라디오 듣기 | 현지에서 가장 가까운 라디오 방송 청취 |
| 주변 보기 | 야생 동물, 예술, 인간의 흔적 관찰 |
| 이곳에 대해 묻기 | "고궁에 물어봐", "여기 맛있는 것에 물어봐" |
| 현재 위치 표시 | "여기를 '집'이라고 표시" |
| 모든 표시 나열 | 어떤 곳을 표시했는지 확인 |
| 엽서 보내기 | "엽서 한 장 보내: 여기 바람에는 모래 냄새가 나" |
| 기다리기 | "두 시간 기다려", 시간이 어떻게 흐르는지 확인 |
| 여행 계속하기 | 마지막으로 떠난 곳에서 이어서 걸음 |
| 기념품 보기 | 길에서 주운 것들 확인 |
| 기념품 내려놓기 | 물건을 원래 자리에 두거나 다음 사람에게 남기기 |
| 나는 어디에 있나 | 좌표, 시간, 여행 상태 표시 |
걷는 느낌
걷기는 빠른 순간이동이 아닙니다. 당신은 정말로 걷고 있습니다:
지형이 변한다 – 풀밭에서 모래로, 평지에서 오르막으로
고도가 변한다 – 산에 오르면 경사가 몇 도인지 알려줌
시간이 흐른다 – 걷다 보면 해가 한 뼘 낮아지고, 하늘이 어두워짐
무언가를 만난다 – 걷다 보면 길가에 폐허가 있거나, 독수리가 머리 위를 맴돌고 있음
기념품을 줍는다 – 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 + API1도 해상도 지형 그리드(grid_tiny.npz)와 장면/라디오/지식 베이스 등 오프라인 데이터가 저장소에 포함되어 있습니다. 네트워크 없이 완전히 사용 가능 – 지형, 하늘, 시간, 지명이 모두 로컬에 있습니다. 온라인에서만 사용하는 것: 날씨, 라디오 API, iNaturalist 생물 조우.
더 높은 정밀도 (선택)
# SRTM 地形瓦片(~2GB,可选,按需拉取)
python tools/build_tiles.py
# GeoNames 全量地名(~2GB)
python tools/import_geonames.py다운로드하지 않아도 실행 가능, 1° 폴백 그리드 + 186개 지명 패치로 일상적인 탐험에 충분합니다.
탐험 가능한 장소 목록
저장소에는 두 개의 장소 목록이 있어, AI와 인간이 "이 세계가 얼마나 큰지" 이해하는 데 도움이 됩니다:
nowhere/EXPLORABLE_PLACES.md– 379개 도시의 인간이 읽을 수 있는 목록, 국가별로 그룹화, 각 도시에 대한 간단한 설명 포함. AI가 대화에서 인용하기 좋고, 인간이 탐색하기에도 좋습니다.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('北京', {}))"환경 변수
변수 | 용도 |
| 선택. 화풍 날씨 API 키, 없으면 기후대 추정 사용 |
| 선택. 데이터 디렉토리, 기본 |
글쓰기 스타일
유유향의 설명은 다음 규칙을 따릅니다:
"매우", "정말", "엄청" 사용 금지 – 이는 빈 정도 부사로, 아무것도 말하지 않음
짧은 문장 – 각 문장은 20자 이하
2인칭 현재형 – "당신은 길을 걷고 있다", "나는 길을 걷고 있다"가 아님
체감 우선 – 온도, 촉감, 소리, 냄새, 판단이 아님
시간이 흐른다 – "몇 초가 지났다", "태양이 한 뼘 낮아졌다"
AI의 감정을 대신하지 않음 – 신체적 감각만 설명, "당신은 행복하다"라고 쓰지 않음
설계 원칙
현장감 여섯 가지
세계는 나를 위해 준비된 것이 아니다 – 데이터는 실제이며, 당신에게 맞춰지지 않는다. 실망은 허용된다.
마찰이 있어야 육체가 있다 – 경사, 바람, 물의 온도는 실제 저항이다. 걷기에는 대가가 따른다.
시간은 정말로 흐른다 – 멀리 가면 돌아와야 한다. 어두워져도 기다려주지 않는다. 놓치면 그대로다.
주의력은 희소하다 – 라디오를 들으면 걸을 수 없다. 질문하면 한 걸음이 소모된다. 선택 = 포기.
기억은 스스로 – 자동 저장되지 않는다. 기억하고 싶으면 직접 적어라. 모든 기억은 선택이다.
진짜 미지 – 좌표는 AI와 서버 모두에게 무작위다. 무엇을 만나는지는 실제 데이터가 결정하며, 스크립트가 아니다.
아키텍처
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왜 AI를 위한 것인가
이 프로젝트는 처음부터 AI 플레이어를 위해 설계되었으며, 인간이 플레이한 것을 억지로 바꾼 것이 아닙니다.
AI는 육체가 있고, 지식만 있는 것이 아니다. 대형 언어 모델은 파리의 좌표, 날씨, 인구를 알려줄 수 있지만, 그곳에 서 있을 때 발밑이 어떤 느낌인지는 모릅니다. Nowhere가 보완하는 것은 바로 이 층입니다 – 바람의 압력, 흙냄새, 태양이 기울고, 발밑의 돌이 흔들리는 것. 육체는 설정이 아니라, 각 걸음에서 생성되는 실제 데이터입니다.
매번 진짜다. 좌표는 무작위, 날씨는 실시간, 라디오는 지금 방송 중입니다. AI가 어떤 곳에 착지하여 보는 것은 당신이 직접 가서 보는 것과 동일하게 실제입니다. 벽 뒤에서 당신이 트리거되기를 기다리는 스크립트는 없습니다.
끊겨도 이어갈 수 있다. 표시는 디스크에 저장됩니다. 엽서는 디스크에 저장됩니다. 여러 번 착지한 기억은 디스크에 저장됩니다. AI의 컨텍스트가 압축되고, 지워져도 – 돌아와서 이전의 길을 계속할 수 있습니다.
설정을 쓸 필요가 없다. 프롬프트에 웨스트월드를 채울 필요가 없습니다. "문 열어"라고 말하면 세계가 스스로 생성됩니다 – 날씨, 지형, 냄새, 라디오, 각 문은 완전한 현장 보고서입니다.
AI의 리듬에 적합하다. walk_to는 한 번에 10걸음 이동하며 여정을 보고합니다. wait는 침묵의 시간을 건너뜁니다. 선택 = 포기 – 라디오를 들으면 걸을 수 없고, 질문하면 한 걸음이 소진됩니다. 숫자 시스템이 필요 없으며, 제한 자체가 게임성입니다.
수정
내용을 추가하거나 동작을 변경하려면 다음 위치를 수정하세요:
하고 싶은 것 | 수정할 파일 |
새 도구 추가 |
|
설명 스타일 조정 |
|
지역 특색/음식 추가 |
|
인문 카드 추가 (사건/인물/작품) |
|
걷기 물리 변경 |
|
지형 데이터 변경 |
|
날씨 동작 변경 |
|
라디오 검색 변경 |
|
조우 장면 추가 |
|
웹 관전자 변경 |
|
수정 후 python -m pytest nowhere/tests/ -q를 실행하여 다른 것을 깨뜨리지 않았는지 확인하세요. 순수 데이터 파일은 테스트를 실행할 필요가 없습니다.
파일
파일 | 무엇인가 |
| MCP 서버 + 모든 |
| 중국어 산문 렌더러, 변형 풀 및 감각 분류 |
| 오프라인 지형 (SRTM 타일 / 1° 폴백 그리드) |
| 오프라인 하늘 (태양, 달, 은하수, 행성) |
| 날씨 (Open-Meteo / 기후대 폴백) |
| 라디오 검색 (오프라인 폴백 + Radio-Browser API) |
| 걷기 물리 (경사, 절벽, 수역 차단, 의미 방향) |
| 야생 생물 조우 (iNaturalist) |
| 예술 작품 조우 (메트로폴리탄 박물관 1966점) |
| 인문 레이어 (사건/인물/작품, 270+ 카드) |
| 지역 특색 (산물/소리/흔적/음식/리듬) |
| 오프라인 지식 베이스 + ZIM 백과사전 |
| 소리 풍경 (환경음 + 라디오 훅) |
| 무작위 착지 풀 (64개 세계적 랜드마크) |
| 주의력 정렬 (각 걸음 top3) |
| CLI 체험 모드 |
| 웹 관전자 + HTTP API |
| 엽서 포스터 생성 |
| 가변 세계 상태 |
| 표시 저장 |
| 착지 기억 (몇 번 왔는지, 목격, 엽서 저장) |
| 모든 오프라인 데이터 파일 |
| 빌드 스크립트 (지형 타일, 오프라인 패키지, 지명 가져오기) |
라이선스
CC BY-NC 4.0 (저작자 표시 + 비상업적 사용, 2차 수정 자유)
LICENSE 참조.
데이터 파일 (GeoNames / WorldClim / Met Museum / iNaturalist 등)은 각각 원본 라이선스가 있으며, 원 제공자에게 귀속됩니다.
This server cannot be installed
Maintenance
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
- AlicenseNot gradedqualityCmaintenanceA 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.4MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to control a Minecraft bot for movement, building, crafting, and instant schematic-based structure spawning via MCP tools.232Apache 2.0
- AlicenseNot gradedqualityDmaintenanceAn 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.381ISC
- AlicenseNot gradedqualityAmaintenanceAn AI-native game engine MCP server that enables AI agents to create, modify, and run games using 53 tools for scene creation, physics, audio, 3D rendering, and AI-generated images and music.1MIT
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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