activities-mcp

activities-mcp

MCP server that provides read-only access to cached metadata of public activities, contests, and competitions from multiple sources via SQLite, enabling search and listing without hitting external sites.

Category
访问服务器

README

activities-mcp

공개 활동·공모전·경진대회 목록의 공개 메타데이터만 로컬 SQLite에 캐시하고, 읽기 전용 MCP 도구 5개로 STDIO에 제공하는 서버입니다. 수집은 명시적으로 실행하는 CLI 작업이며, MCP 서버는 이미 저장된 캐시만 읽습니다.

제공 MCP 도구

도구 입력 반환
list_activity_sources 7개 소스의 활성 상태, 캐시 건수, 마지막 안전 상태
list_latest_activities source?, normalized_status?, 날짜 범위, limit, offset 최신 캐시 메타데이터
search_activities query, 선택 필터, limit, offset SQLite FTS5 검색 결과
list_activity_changes discovered_after? 또는 cursor?, limit 발견·갱신 변경 피드
get_activity activity_id 단건 캐시 메타데이터

모든 도구는 읽기 전용입니다. 입력 오류는 invalid_input, 로컬 캐시 접근 실패는 storage_error, 존재하지 않는 항목은 not_found의 안정적인 응답 계약으로 반환하며, SQL·경로·로컬 예외 세부 정보는 노출하지 않습니다.

지원 소스와 수집 범위

현재 지원하는 소스는 아래 7개입니다. 모든 요청은 HTTPS, 허용 호스트·경로· 쿼리 정책, 수동 리다이렉트 검증, 응답 크기 제한, 지연, 제한된 재시도 아래에서 수행합니다. 401·403·429, CAPTCHA, 정책 위반, 파서 드리프트는 우회하지 않고 해당 소스를 저하 상태로 기록합니다.

소스 수집 방식 기본 상태
Linkareer 공개 활동·공모전 HTML 목록의 최신 1페이지씩 활성. STEM, 로그인, 프로필, 구매, GraphQL은 요청하지 않음
Wevity 공개 카테고리 HTML 목록 활성. 공개 카드 메타데이터만 수집
ContestKorea 공개 목록 HTML 활성. WAF·차단 응답은 저하로 종료
Thinkgood 공개 POST /thinkgood/user/contest/subList.do JSON 목록 활성. 허용된 목록 필드만 읽고 파일·업로드·전자책은 제외
DACON 공개 대회 목록 HTML 활성. 데이터셋, 제출, 코드, 리더보드, 프로필은 제외
AI Factory 공개 SSR/Next RSC 대회·과제 목록 활성. 목록의 허용 메타데이터만 읽고 상세 요청 없음
Ticketa 공개 sitemap.xml 후 최신 후보 1건의 공개 JSON-LD 이벤트 상세 활성. 티켓·주문·결제·사용자·Supabase 영역은 제외

세부 정책 근거와 점검 시각은 docs/source-policy.md를 참조하세요. 이 정책은 기술적 통제이며, 각 사이트의 약관·robots·법적 조건에 대한 허가를 주장하지 않습니다.

기술 구성

  • 런타임: Python 3.13+, uv
  • 서버·저장: MCP SDK (STDIO), SQLite, FTS5
  • 수집: httpx2, BeautifulSoup4, defusedxml
  • 설정·CLI: Pydantic, pydantic-settings, Typer
  • 품질: pytest, Ruff, basedpyright

설치와 로컬 실행

uv sync
uv run activities-mcp --help

처음에는 데이터베이스를 만들고 7개 소스 상태를 시드합니다. 이 명령은 네트워크 수집을 실행하지 않습니다.

uv run activities-mcp init-db --db-path data/activities.db
uv run activities-mcp status  --db-path data/activities.db

refresh는 각 활성 소스의 보수적인 최신 목록 계획만 수행합니다.

uv run activities-mcp refresh --db-path data/activities.db

backfill은 운영자가 명시적으로 요청할 때만 사용합니다. 최대 3페이지의 지원되는 공개 GET 목록만 계획하며, POST 페이지네이션을 추측해서 만들지 않습니다.

uv run activities-mcp backfill --pages 1 --db-path data/activities.db

MCP 서버는 기존 데이터베이스가 있어야 하며 STDIO만 사용합니다.

uv run activities-mcp serve --db-path data/activities.db

statusserve는 데이터베이스를 새로 만들지 않습니다. 실수로 MCP 조회가 수집 작업을 시작하지 않도록 하기 위한 경계입니다.

설정

환경변수는 검증된 기본값을 제공하고, 명시한 --db-path가 우선합니다.

환경변수 의미 기본값
ACTIVITIES_MCP_DB_PATH SQLite 캐시 경로 activities.db
ACTIVITIES_MCP_DELAY_SECONDS 요청 전 지연 시간 3.0
ACTIVITIES_MCP_MAXIMUM_RESPONSE_BYTES 응답 본문 상한 4 MiB

예를 들어 별도 경로와 짧은 로컬 테스트 지연을 사용하려면 다음과 같이 실행합니다.

ACTIVITIES_MCP_DB_PATH=data/activities.db \
ACTIVITIES_MCP_DELAY_SECONDS=3 \
uv run activities-mcp refresh

MCP 클라이언트 등록

GUI 클라이언트는 셸의 PATH를 상속하지 않을 수 있으므로 command에는 uv의 절대 경로를 권장합니다. 아래의 /Users/me/.local/bin/uv, 프로젝트 경로, DB 경로를 실제 환경에 맞게 바꾸세요.

Claude Desktop

Claude Desktop의 MCP 설정 파일에 다음 서버를 추가합니다.

{
  "mcpServers": {
    "activities": {
      "command": "/Users/me/.local/bin/uv",
      "args": [
        "run", "--project", "/path/to/activities-mcp",
        "activities-mcp", "serve", "--db-path",
        "/path/to/activities-mcp/data/activities.db"
      ]
    }
  }
}

ChatGPT/Codex

ChatGPT/Codex의 로컬 MCP 서버 설정에 같은 STDIO 명령을 등록합니다.

{
  "mcpServers": {
    "activities": {
      "command": "/Users/me/.local/bin/uv",
      "args": [
        "run", "--project", "/path/to/activities-mcp",
        "activities-mcp", "serve", "--db-path",
        "/path/to/activities-mcp/data/activities.db"
      ]
    }
  }
}

Hermes

Hermes의 로컬 MCP 서버 설정에도 다음 STDIO 구성을 사용합니다.

{
  "mcpServers": {
    "activities": {
      "command": "/Users/me/.local/bin/uv",
      "args": [
        "run", "--project", "/path/to/activities-mcp",
        "activities-mcp", "serve", "--db-path",
        "/path/to/activities-mcp/data/activities.db"
      ]
    }
  }
}

세 클라이언트 모두 먼저 init-db를 한 번 실행하고, 캐시 파일 경로가 서버 프로세스에서 읽을 수 있는 위치인지 확인해야 합니다.

스케줄러와 GitHub Actions

이 프로그램에는 내부 스케줄러가 없습니다. 운영 환경의 cron, systemd timer, 워크플로, 컨테이너 스케줄러처럼 관리자가 선택한 저빈도 실행기로 refresh를 호출하세요.

0 3 * * 3 cd /path/to/activities-mcp && /Users/me/.local/bin/uv run activities-mcp refresh --db-path data/activities.db

저장소의 .github/workflows/refresh.yml은 수동 실행과 주간 cron을 제공합니다. 워크플로는 이전 activities.db 캐시를 복원한 뒤 init-db(멱등), refresh를 실행하고 새 캐시를 보관합니다. 모든 액션은 커밋 SHA로 고정되어 있으며 권한은 읽기 전용입니다. 운영 정책과 백필 지침은 docs/scheduler.md를 참조하세요.

캐시 보존과 실패 처리

수집 성공은 해당 소스의 유효한 공개 레코드를 upsert하고 안전 상태를 갱신합니다. 반대로 타임아웃, 차단, CAPTCHA, 파서 드리프트, 빈 파싱 결과, 개별 상세 실패는 기존 캐시를 삭제하지 않습니다. 소스 상태만 degraded와 안전 오류 코드로 바뀌며, 다른 소스의 수집은 계속 진행합니다. 따라서 일시적 외부 장애 중에도 MCP 클라이언트는 마지막으로 검증된 캐시를 계속 읽을 수 있습니다.

개인정보·비수집 원칙

이 프로젝트는 목록에서 공개된 제목, 주최자, 날짜, 상태, 카테고리, 태그, 위치, 공개 카운터와 정규 URL 등 최소 메타데이터만 저장합니다. 다음은 요청·저장·반환하지 않습니다.

  • 로그인 세션, 계정, 프로필, 개인 연락처, 이메일, 전화번호
  • 결제, 구매, 주문, 티켓, 제출물, 데이터셋, 첨부파일, 이미지, 본문
  • API 키, Supabase 비밀값, 쿠키, 인증 헤더
  • LLM 프롬프트, 대화 내용, 추천·랭킹을 위한 사용자 행동 데이터

테스트 파서 fixture도 키·이메일·전화번호·실제 비공개 응답을 포함하지 않도록 검사합니다.

MCP와 LLM의 책임 경계

MCP 서버의 책임은 로컬 캐시의 사실적 메타데이터 조회뿐입니다. 서버는 LLM을 호출하지 않고, 추천·판단·지원서 작성·일정 등록·자동 제출·외부 변경을 수행하지 않습니다. Claude, ChatGPT/Codex, Hermes 같은 클라이언트의 LLM은 반환된 사실을 어떻게 대화에 활용할지 결정할 수 있지만, 그 판단과 생성 결과는 이 서버의 수집· 저장·정책 경계 밖에 있습니다.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选