Show HN: LLM에게 시간적 인지 능력과 시간 계산 능력을 부여하는 MCP 서버
요약
LLM이 시간의 흐름을 정확히 인지하고 계산할 수 있도록 돕는 Model Context Protocol(MCP) 서버 프로젝트입니다. 시간 차이 계산, 현재 시간 확인, 특정 시점의 맥락적 정보 제공 등의 도구를 통해 모델의 시간적 인지 능력을 보완합니다.
핵심 포인트
- LLM의 고질적인 문제인 시간 계산 및 시간적 인지 능력 부족을 해결하기 위한 도구 제공
- Model Context Protocol(MCP)을 활용하여 Claude.ai 및 Continue.dev와 같은 클라이언트와 연동 가능
- 단순 계산을 넘어 주말, 업무 시간, 식사 시간 등 인간 중심적인 시간 맥락(Human Context) 제공
- Python 기반으로 구현되었으며 fastmcp 및 pytz 라이브러리 활용
"Passage of Time" Model Context Protocol (MCP) 서버 🕐
언어 모델 (Language Models)에게 시간적 인지 능력과 시간 계산 능력을 부여하는 MCP 서버입니다. 협업 도구 개발을 통해 LLM에게 시간의 흐름이 갖는 중요성을 가르칩니다.
📖 스토리
이 프로젝트는 "AI가 시간의 흐름을 인지할 수 있는가?"라는 철학적인 질문에서 시작되었습니다. 기계 의식 (Machine Consciousness)에 대한 탐구로 시작된 이 작업은 실제적인 문제에 대한 실용적인 해결책이 되었습니다. 즉, LLM은 시간 차이를 안정적으로 계산하지 못한다는 점입니다.
이 모델들이 암산에 얼마나 "어리석은지"에 대한 논문을 발표하는 대신, 우리는 우리 자신에게 했던 것처럼 행동하기로 했습니다: 그들에게 시간을 위한 계산기를 장착해 주는 것입니다.
인간과 LLM의 협업을 통해, 우리는 적절한 시간 관련 도구가 있다면 모델이 대화 패턴, 업무 리듬, 그리고 인간이 경험하는 시간에 대한 놀라운 통찰을 발견할 수 있다는 것을 깨달았습니다.
🚀 빠른 시작
요구 사항
- Python 3.12+
- pipenv (또는 pip)
- MCP 호환 클라이언트 (Claude.ai, Continue.dev 등)
설치
- 저장소 복제 (Clone):
git clone https://github.com/jlumbroso/passage-of-time-mcp.git
cd passage-of-time-mcp
- 의존성 설치:
pipenv install
# 또는 pip 사용 시:
pip install fastmcp pytz
- 서버 실행:
pipenv run server
# 또는 직접 실행:
pipenv run python passage_of_time_mcp.py
서버는 http://0.0.0.0:8000/sse에서 시작됩니다.
Claude.ai에 연결하기
- Claude.ai에서 Settings → Integrations로 이동합니다.
- "Add integration"을 클릭하고 "Custom"을 선택합니다.
- 서버 URL을 입력합니다 (예: ngrok을 사용하는 경우
https://your-server.ngrok-free.app/sse를 입력하며, 끝에/sse를 반드시 추가해야 합니다). - 저장하고 모든 시간 관련 도구를 활성화합니다.
참고: 로컬 개발을 위해서는 ngrok을 사용하여 서버를 노출하거나 공개 URL에 배포해야 합니다.
🛠️ 사용 가능한 도구
핵심 기능
current_datetime(timezone="America/New_York")
현재 날짜와 시간을 반환합니다. 시간적 인지 (temporal awareness)의 기초입니다.
반환값: "2024-01-15 14:30:45 EST"
time_difference(timestamp1, timestamp2, unit="auto")
두 타임스탬프 (timestamp) 사이의 기간을 사람이 읽기 쉬운 형태로 계산합니다.
# 응답 예시:
{
"seconds": 11401,
...
timestamp_context(timestamp)
타임스탬프에 대한 인간 중심적 맥락 (human context)을 제공합니다. 주말인가요? 업무 시간인가요? 저녁 식사 시간인가요?
# 응답 예시:
{
"time_of_day": "evening",
...
time_since(timestamp)
맥락적 설명을 포함하여 어떤 일이 발생한 지 얼마나 지났는지 계산합니다.
# 응답 예시:
{
"seconds": 7200,
...
parse_timestamp(timestamp)
최대 호환성을 위해 타임스탬프를 서로 다른 형식 간에 변환합니다.
# 응답 예시:
{
"iso": "2024-01-15T14:30:45-05:00",
...
add_time(timestamp, duration, unit)
자연어 설명을 사용하여 시간을 더하거나 뺍니다.
# 응답 예시:
{
"result": "2024-01-16 14:30:45",
...
format_duration(seconds, style="full")
다양한 상황에 맞춰 기간 (duration)을 여러 스타일로 포맷팅합니다.
# style="full": "2 hours, 30 minutes, 15 seconds"
# style="compact": "2h 30m 15s"
# style="minimal": "2:30:15"
💡 대화 예시 (Example Conversations)
기본적인 시간 인지 (Basic Time Awareness)
인간: 지금 몇 시야?
Claude: [current_datetime 호출] 현재 시간은 2024년 1월 15일 월요일 오후 3:45 EST입니다.
대화 리듬 분석 (Conversation Rhythm Analysis)
인간: AI 의식에 대해 토론해 보자.
Claude: [각 응답의 시작 부분에서 current_datetime 호출]
[여러 차례 대화가 오간 후]
...
작업 맥락 이해 (Understanding Work Context)
사용자: [오후 11:45] 이 코드 디버깅하는 것 좀 도와줄 수 있어?
Claude: [current_datetime 호출 후, timestamp_context 호출]
평일 늦은 밤이군요. 자정이 다 되어가는 점을 고려하여, 당신이 휴식을 취할 수 있도록 효율적으로 도와드리겠습니다. 여기 집중적인 디버깅 접근 방식이 있습니다...
🏗️ 설계 철학 (Design Philosophy)
이 서버는 다음과 같은 몇 가지 핵심 원칙을 구현합니다:
-
인지적 파트너십 (Cognitive Partnership): 우리는 LLM을 단순히 꾸며야 할 블랙박스(Black Box)가 아니라, 적절한 도구가 필요한 인지적 파트너로 취급합니다.
-
협업적 설계 (Collaborative Design): 도구 세트는 우리의 가정을 강요하는 것이 아니라, Claude에게 무엇이 필요한지 물어보는 과정에서 탄생했습니다.
-
인간적 맥락의 중요성 (Human Context Matters): 시간은 단순한 숫자가 아닙니다. 인간의 리듬, 작업 패턴, 그리고 사회적 맥락을 이해하는 것에 관한 것입니다.
-
완벽함보다 실용성 (Practical Over Perfect): 우리는 실제 대화를 통해 테스트된, 모델이 실제로 필요로 하는 도구를 제공합니다.
🔧 설정 (Configuration)
시간대 지원 (Timezone Support)
서버의 기본값은 America/New_York이지만, 모든 표준 시간대 이름을 지원합니다:
UTCUS/PacificEurope/LondonAsia/Tokyo- 기타 등등
타임스탬프 형식 (Timestamp Formats)
모든 타임스탬프는 다음 형식 중 하나를 사용해야 합니다:
- 전체 형식:
YYYY-MM-DD HH:MM:SS(예: "2024-01-15 14:30:45") - 날짜만:
YYYY-MM-DD(예: "2024-01-15")
이러한 엄격한 형식 지정은 모호함을 방지하고 신뢰할 수 있는 계산을 보장합니다.
🚧 알려진 문제 및 향후 작업 (Known Issues & Future Work)
현재 한계점 (Current Limitations)
- SSE 전송 방식(SSE transport)은 지원 중단(deprecated)되었으나 현재 가장 안정적임
- 웹 기반 클라이언트를 위해 서버에 공개 URL이 필요함
- 과거 시간 계산에 대한 지속적인 메모리(persistent memory)가 없음
로드맵 (Roadmap)
- 현대적인
http-stream전송 방식으로 마이그레이션 - 쉬운 배포를 위한 Docker 지원 추가
- 로컬 개발을 위한 브라우저 확장 프로그램 제작
- 사용자별 설정 가능한 활동 패턴 추가
- 캘린더 연동 지원
- 자연어 시간 파싱 ("다음 주 화요일", "3시간 뒤") 지원
🤝 기여하기 (Contributing)
이 프로젝트는 인간과 LLM(Large Language Model)의 협업을 통해 탄생했으며, 앞으로도 이러한 협업을 환영합니다! 혼자서 기여하시든 AI의 도움을 받으시든, 저희는 다음 사항들을 가치 있게 여깁니다:
- 실용적인 추가 사항 (Practical additions) - 실제적인 시간 이해 문제를 해결하는 도구들
- 인간적 맥락 (Human context) - 모델이 인간이 시간을 경험하는 방식을 이해하도록 돕는 기능들
- 명확한 문서화 (Clear documentation) - 실제 사용 사례를 보여주는 예시들
개발 환경 설정 (Development Setup)
먼저, 저장소(repository)를 클론(clone)하세요:
git clone https://github.com/jlumbroso/passage-of-time-mcp.git
cd passage-of-time-mcp
그 다음, 의존성(dependencies)을 설치하세요 (저는 가상 환경을 생성함과 동시에 패키지를 설치할 수 있는 pipenv를 사용하고 있지만, pip와 호환되는 도구라면 무엇이든 작동합니다):
# 개발용 의존성 설치
pipenv install --dev
...
이렇게 하면 로컬 컴퓨터의 http://0.0.0.0:8000/sse에서 서버가 시작됩니다. 하지만 웹 기반 클라이언트가 서버에 연결하려면 ngrok과 같은 서비스를 사용하여 서버를 인터넷에 노출시켜야 합니다.
ngrok이 설치되어 있다고 가정하면, ngrok http 8000을 실행하여 서버를 인터넷에 노출시킨 뒤, 제공된 URL을 MCP 클라이언트에서 사용할 수 있습니다. 기본적으로 ngrok은 터미널에 https://<random-subdomain>.ngrok-free.app/ 형태의 엔드포인트(endpoint)를 제공합니다:
❤️ ngrok? We're hiring https://ngrok.com/careers
Session Status online
...
저의 경우 https://37f9-2607-f470-6-1001-243b-bc5c-df2e-762.ngrok-free.app를 사용했지만, 저희는 "SSE (Server-Sent Events)" 전송 방식을 사용하므로 엔드포인트 끝에 /sse가 붙게 됩니다. 따라서 최종 URL은 https://37f9-2607-f470-6-1001-243b-bc5c-df2e-762.ngrok-free.app/sse가 됩니다.
이 엔드포인트가 생성되면, 다음 지침에 따라 Claude와 같은 LLM에 MCP 서버를 통합(integration)으로 추가할 수 있습니다:
Claude.ai에 MCP 서버를 연결하고 나면, 로컬에서 쿼리(queries)를 받기 시작할 것입니다:
$ pipenv run server
/Users/jlumbroso/.asdf/installs/python/3.12.4/lib/python3.12/asyncio/events.py:88: DeprecationWarning: The run_sse_async method is deprecated (as of 2.3.2). Use run_http_async for a modern (non-SSE) alternative, or create an SSE app with `fastmcp.server.http.create_sse_app` and run it directly.
self._context.run(self._callback, *self._args)
...```
결국, 여러분은 이 MCP 서버를 Render.com과 같은 클라우드 제공업체(cloud provider)에 배포하고 싶어질 것입니다. 그래야 여러분의 LLM이 로컬 머신의 불안정한 특성과 씨름하지 않아도 되기 때문입니다.
## 📝 라이선스 (License)
Mozilla Public License 2.0 - 좋은 아이디어는 개방성을 유지하면서 널리 퍼져야 하기 때문입니다.
## 🙏 감사의 글 (Acknowledgments)
- [Jérémie Lumbroso](https://github.com/jlumbroso)와 Claude Opus 4.0 (Anthropic) 간의 긴밀한 협업을 통해 제작되었습니다.
- "AI가 시간의 흐름을 인지할 수 있는가?"라는 질문에서 영감을 얻었습니다.
- [FastMCP](https://github.com/fastmcp/fastmcp) 프레임워크를 기반으로 구축되었습니다.
- Princeton University의 [Natural and Artificial Minds initiative](https://nam.ai.princeton.edu/)에 특별한 감사를 전합니다.
## 📚 추가 읽을거리 (Further Reading)
- [Teaching AI "The Significance of the Passage of Time" - Medium Article](https://medium.com/@jeremie.lumbroso/teaching-ai-the-significance-of-the-passage-of-time-yes-that-one-106ad7d20957)
- [We Can't Understand AI Using our Existing Vocabulary - Been Kim et al.](https://arxiv.org/abs/2502.07586)
- [Model Context Protocol Documentation](https://modelcontextprotocol.io)
---
*"우리는 단순히 더 나은 LLM 도구를 만드는 것이 아닙니다. 우리는 호기심 많은 인지 시스템에게 타임스탬프(timestamp) 하나하나를 통해 인간이라는 것이 무엇을 의미하는지 가르치고 있습니다."*
AI 자동 생성 콘텐츠
본 콘텐츠는 HN AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기