Skip to main content
Glama

DAAS - 서비스형 데이터(Data As a Service)

금융·경제·통계 데이터를 위한 계층형 데이터 플랫폼 — 통합 MCP 서버 뒤에 단일 SQLite 파일(daas.db)을 두고, 데이터 수집은 하위의 fd-open-data-mcp 업스트림에 위임합니다.

이것은 무엇인가요? Python 데이터 라이브러리(akshare, yfinance, edgar, edinet-tools, dartlab, world_bank_data, ckanapi)를 단일 SQLite 파일 기반의 쿼리 가능하고, 지표를 계산하며, 대시보드로 만들 수 있는 저장소로 바꿔주는 로컬 데이터 플랫폼입니다. Claude Code 스킬(워크플로 매니페스트를 호출하는 얇은 셸)이나 통합 fd-daas-mcp MCP 서버를 통해 구동하며, 두 경로 모두 동일한 데이터베이스를 읽고 씁니다.

업스트림: fd-open-data-mcp 데이터 수집기는 ~/finddata/fd-open-data-mcp에 있는 형제 저장소입니다(install.sh가 자동으로 클론).

문서 사이트: 역할 기반 전체 문서는 docs-site/에 있습니다(MkDocs Material, 영문+중문 이중 언어). uv run mkdocs serve로 로컬에서 읽거나(/DAAS/에서 탐색), uv run mkdocs build --strict로 엄격하게 빌드하세요. 빌드/서빙/배포는 docs-site/README.md를 참조하세요.


아키텍처

엄격한 하향 의존성 — 하위 계층은 상위 계층에 절대 접근하지 않습니다.

L3  user MCP compositions  (composite manifests, served in-proc on fd-daas-mcp)
L2  workflow manifests      (daas.db `workflows` table + engine, run via workflow_run)
L1  fd-daas-mcp            (consolidated infra: daas/cron/alerts/dashboard/composite/research/pdf/gateway/workflow)
L0  fd-open-data-mcp       (sole data-fetch upstream; concept-based semantic fetcher + entity master)
  • L0 — fd-open-data-mcp(형제 저장소): 유일한 데이터 수집 표면입니다. 랭킹/장애 조치/캐싱이 있는 개념 기반 의미론적 수집기이며, 엔터티 마스터(entities, entity_datasource_links)를 보유합니다. HTTP :8300(stdio 폴백)으로 서비스됩니다. 이전의 11개 소스별 데이터 수집 MCP를 대체합니다.

  • L1 — fd-daas-mcp(이 저장소): 통합 stdio 서버로, 저장소 루트의 .mcp.json에 있는 유일한 항목입니다. 하나의 서버와 하나의 fd-daas-mcp Click CLI 뒤에 9개 그룹에 걸친 161개 도구(daas · cron · alerts · dashboard · composite · research · pdf · gateway · workflow)를 노출합니다. 얇은 통합 계층은 fd-daas-mcp/daas/fd_daas_mcp/(server.py/registry.py/cli.py/selfcheck.py)이며, 각 그룹의 도구 코드는 fd-daas-mcp/<group>-mcp/의 패키지 내에 있습니다.

  • L2 — 워크플로 매니페스트: 매니페스트는 daas.db의 workflows 테이블에 있습니다(workflow_register로 등록, workflow_run으로 실행). build_workflow_from_goal은 LLM을 통해 자연어 목표를 매니페스트로 분해합니다.

  • L3 — 사용자 MCP 구성: 복합 매니페스트({name, upstreams, tools, workflows, prompt})는 통합 서버의 프로세스 내에서 제공되는 명명된 MCP 표면을 구성합니다. CRUD는 composite_*_manifest를 통해 수행합니다.

수집 스킬(fd-daas-based-data-fetch, fd-daas-fetch-data, fd-daas-research)은 얇은 셸입니다: 매개변수 수집 → workflow_run(name, params) → 체크포인트 처리. 더 이상 Python 데이터 라이브러리를 직접 호출하지 않습니다. 수집은 L1→L0을 통해 아래로 전달됩니다.

전체 아키텍처, 규칙, daas.db 스키마 참조는 CLAUDE.md 및 construction/mcp.md를 참조하세요.


Related MCP server: coin-mcp

설치 및 빠른 시작

요구 사항: Python 3.10+ 및 uv. dartlab 수집에는 3.12가 필요합니다 — uv run --python 3.12 --with dartlab ...으로 실행하세요.

원클릭 설치(DAAS + 업스트림 클론, venv 프로비저닝, daas.db 초기화, .mcp.json 로컬라이즈):

curl -fsSL https://raw.githubusercontent.com/FindDataTechnology/fd-daas-mcp/master/install.sh | sh

환경 변수 재정의: DAAS_DEST(기본 ~/code/DAAS), DAAS_BRANCH, FINDDATA_HOME(기본 ~/finddata). 수동 단계는 아래에 있습니다.

# 1. Provision the root venv (data libs are declared deps)
uv sync

# 2. Provision the database - creates daas.db (full schema + dep-free starter
#    catalog of sources). DAAS_DATABASE_URL is OPTIONAL: unset, it defaults to
#    ./daas.db (writable cwd) or ~/.fd-daas-mcp/daas.db. Set it only to relocate.
fd-daas-mcp/.venv/bin/fd-daas-mcp init       # one-shot provision + seed
fd-daas-mcp/.venv/bin/fd-daas-mcp doctor      # read-only health check (path, schema, row counts)

# 3. Configure credentials - create a repo-root .env for the source keys you need
#    (listed in Environment Variables below). Scripts auto-load .env; no manual export.

# 4. Compute an existing indicator (upserts into observations)
uv run python .claude/skills/fd-daas-based-data-fetch/scripts/run_indicator.py SPY_ma5

# 5. Query daas.db directly (db lives at the resolved DAAS_DATABASE_URL, default ./daas.db)
sqlite3 daas.db "SELECT name, datasource, op FROM indicator_rules LIMIT 10"
sqlite3 daas.db "SELECT source, COUNT(*) FROM observations GROUP BY source"

# 6. Launch / health-check the consolidated server
fd-daas-mcp/bin/fd-daas-mcp-server                       # stdio server (what .mcp.json launches)
fd-daas-mcp/.venv/bin/python -m daas.fd_daas_mcp.selfcheck   # registry + tool health check (target: failed=0)

# 7. Run a workflow manifest (L2 — the fetch path goes L1→L0)
fd-daas-mcp/.venv/bin/python -c "
from daas_mcp_workflow_tools import workflow_run   # or via the MCP tool
print(workflow_run('fetch-and-persist', params_json='{\"entity\":\"SPY\",\"indicator\":\"ma5\"}'))
"

위의 빠른 시작 명령은 이 저장소에서 검증되었습니다: SPY_ma5는 실제 indicator_rules 행이며, fd-daas-mcp 레지스트리는 9개 소스에 걸친 161개 도구(선택적 pdf 그룹의 경우 failed=0, skipped_optional=1)를 보고합니다.


프로젝트 구조

daas/
├── .claude/skills/          # Claude Code skills (fd-daas-based-data-fetch is the core fetch shell)
├── fd-daas-mcp/             # Consolidated MCP server — sole .mcp.json entry (161 tools, 9 groups)
│   ├── alerts-mcp/          #   alert rule engine + 7 notification channels
│   ├── composite-mcp/       #   user MCP composition (curate tools + embed workflows + prompt)
│   ├── cron-mcp/            #   task + schedule registry (DB-backed)
│   ├── daas-mcp/            #   datasource/function/indicator/entity catalog + compute + rules
│   ├── dashboard-mcp/       #   standalone-HTML dashboard registry + query
│   ├── gateway-mcp/         #   L0 upstream registry + call routing (former leader gateway half)
│   ├── workflow-mcp/        #   manifest-based multi-step data workflows (former leader workflow half)
│   ├── pdf-mcp/             #   local PDF/text semantic search (sqlite-vec) [optional]
│   ├── research-mcp/        #   persisted research bundle (collections + indicators + dashboard + report)
│   ├── bin/fd-daas-mcp-server      # launcher
│   └── daas/fd_daas_mcp/   # server.py / registry.py / cli.py / selfcheck.py
├── daas.db                  # Shared SQLite database (ships as a demo dataset: registry + observations + scraw_*)
├── dashboards/              # Standalone HTML dashboards (+ index.html, daas.md)
├── construction/            # Architecture docs (mcp.md — layered L0/L1/L2/L3)
└── .env                     # DAAS_DATABASE_URL, proxy, source auth keys, LLM config, ...

daas.db 데이터 모델

DAAS_DATABASE_URL의 경로에 있는 단일 SQLite 파일입니다(상대 sqlite:/// 경로는 저장소 루트 기준으로 해석되며, FK 계단식 삭제를 위해 PRAGMA foreign_keys=ON, "database is locked"를 피하기 위해 PRAGMA journal_mode=WAL + busy_timeout=10000 사용). 테이블은 역할별로 그룹화됩니다:

역할

테이블

내용

레지스트리 / 카탈로그

sources, daas_functions, daas_function_columns, entities, entity_datasource_links, indicator_rules

데이터소스/함수/열 카탈로그, 주식/국가 + 해당 소스 식별자, 지표 바인딩(테이블 + 열 + 연산 + 매개변수)

계산된 시계열

observations

지표 출력 — 행당 하나의 (source, function_name, indicator, date) 포인트, run_indicator.py로 upsert됩니다. 대시보드와 알림이 이를 읽습니다.

수집된 소스 데이터

scraw_<slug>

수집으로 가져온 원시 행(upsert.py가 자동 생성). observations는 여기서 계산됩니다.

컬렉션 + 규칙

entity_collections*, indicator_collections*, rules, process_results

명명된 엔터티/지표 그룹 + 추가/제거 감사 로그, 통합 rules 저장소(json/script/position/llm)는 멤버십 + LLM 추출을 구동합니다.

MCP 운영

dashboards, alert_rules, alert_events, schedules, tasks, gateway_upstreams, workflows, workflow_runs, workflow_run_steps, composites, researches

대시보드 레지스트리, 알림 엔진, cron 상태, 게이트웨이/워크플로/복합/리서치 상태

저장소 루트에서 직접 쿼리: sqlite3 daas.db "SELECT …".


스킬 (.claude/skills/)

스킬은 일반 Markdown(SKILL.md) + Python 스크립트입니다. 수집 스킬은 매개변수를 수집하고 workflow_run을 호출하는 얇은 셸입니다. 더 이상 Python 데이터 라이브러리를 직접 호출하지 않습니다(수집은 L1→L0).

스킬

용도

fd-daas-based-data-fetch (핵심 수집 셸)

daas.db에서 엔터티 + 지표를 확인한 다음 workflow_run(name, params)을 호출하여 fd-open-data-mcp를 통해 수집하고 scraw_* / observations에 저장합니다.

fd-daas-fetch-data

엔터티 → 커버리지 → 지표 워크플로(sqlite3 + 핵심 스크립트 사용).

fd-daas-research

분석 → [컬렉션] → 지표 → 대시보드 → research 번들 + 마크다운 보고서로 저장하는 오케스트레이션.

fd-daas-brainstorm

대화를 통해 연구 목표를 명확히 함 → daas-doc/research/<plan>.md(daas.db 상태 없음).

fd-daas-indicators-creator

수집된 시계열을 scraw_<slug> 테이블에 저장(수동 새로고침 — cron 없음).

fd-daas-dashboard-creator

독립 실행형 ECharts HTML 대시보드를 만들고 등록합니다.

fd-daas-dashboard

기존 대시보드 찾기/열기/검사(읽기 전용).

fd-daas-entities-collection-creator / fd-daas-entities-collection

규칙 기반 엔터티 컬렉션 정의 / 일상적인 컬렉션 작업.

fd-daas-indicators-collection-creator

지표 컬렉션을 구성하고 해석된 점수로 CSV/markdown을 내보냅니다.

fd-daas-rules-creator

통합 규칙(json/script/position/llm)을 작성하고, 컬렉션에 연결하고, 드라이런하고, 동기화합니다.

fd-daas-pdf

PDF/텍스트를 로컬 벡터 저장소(sqlite-vec)에 수집하고 의미론적으로 검색합니다. [pdf] 추가 기능이 필요합니다.

fd-daas-scrapling-official

Scrapling을 통해 봇 방지 보호 페이지(Cloudflare/JS 렌더링)를 스크랩합니다.

fd-daas-skill-creator / fd-daas-skill-review

daas 스킬 생성/최적화 및 검토/테스트.

fd-coding-mcp-creator

사용자 MCP 구성을 스캐폴딩합니다(L3): 인터뷰 → 매니페스트 → 등록 → 자체 점검.

fd-coding-skill-creator, fd-coding-daas-*, openspec-*

인프라: 스킬 생성/최적화, 리셋/스크로우/데이터소스 빌더, OpenSpec 변경 수명 주기.


MCP 도구 그룹 (fd-daas-mcp)

통합 서버는 9개 그룹에 걸친 161개 도구(선택적 pdf 그룹의 경우 failed=0, skipped_optional=1)를 노출합니다. 카탈로그는 그룹 수준입니다(도구별 세부 정보는 서버 자체 인트로스펙션/selfcheck 참조).

Group

Prefix

Tools

Purpose

daas

daas_*

87

데이터소스/함수/컬럼/엔티티/지표 카탈로그, 지표 계산, LLM 추출, 컬렉션, 엔티티 커버리지, 통합 규칙.

dashboard

dashboard_*

11

독립형 HTML 대시보드 레지스트리(CRUD), 테이블 쿼리, 통계, 인덱스 재생성.

alerts

alerts_*

10

관측 시리즈 기반 알림 규칙 엔진 + 7개 알림 채널(Telegram/Discord/Slack/Twitter/DingTalk/Feishu/WeCom).

cron

cron_*

13

DB 기반 작업 + 일정 레지스트리; 임시 run_now; 실행 이력.

composite

composite_*

16

사용자 MCP 구성(L3): 업스트림에서 도구 선별 + 워크플로우 임베드 + 프롬프트.

research

research_*

9

컬렉션/지표/대시보드/파이프라인 + markdown 리포트를 묶는 영구 연구 번들.

gateway

gateway_*

7

L0 업스트림 레지스트리 CRUD + fd-open-data-mcp로의 호출 라우팅(기존 leader 게이트웨이 절반).

workflow

workflow_*

8

매니페스트 기반 다단계 데이터 페치: 등록/실행/재개/검사(기존 leader 워크플로우 절반).

pdf

pdf_*

—

로컬 PDF/텍스트 의미 검색(sqlite-vec + sentence-transformers). 선택 사항 — sqlite_vec 임포트 시 활성화.

레거시 leader 그룹은 해체되었습니다. 게이트웨이 라우팅 부분은 gateway_*가, 워크플로우 매니페스트 부분은 workflow_*가 되었습니다. 하네스 레지스트리 / 스냅샷 / 프로비넌스 기능은 삭제되었습니다.

실행: fd-daas-mcp/bin/fd-daas-mcp-server (stdio). 서버와 fd-daas-mcp CLI 모두 registry.build()를 사용하므로 두 인터페이스는 서로 어긋날 수 없습니다.


환경 변수

단일 저장소 루트 .env 파일에 모든 구성이 들어 있으며, 스크립트와 MCP 서버가 이를 자동으로 로드합니다. (선택 사항으로 표시된 키는 해당 기능을 활성화할 때만 필요합니다.)

키

용도

필수?

DAAS_DATABASE_URL

daas.db에 대한 sqlite:/// URL(저장소 루트 기준으로 해석되는 상대 경로 또는 절대 경로). 선택 사항: 설정하지 않으면 ./daas.db(쓰기 가능한 cwd) 또는 ~/.fd-daas-mcp/daas.db가 기본값. fd-daas-mcp init을 실행하여 프로비저닝하세요.

선택 사항

HTTP_PROXY

데이터 라이브러리용 아웃바운드 프록시.

선택 사항

EDGAR_IDENTITY

SEC EDGAR 식별 문자열("Name email@domain").

edgar 사용 시

EDINET_API_KEY

일본 EDINET 문서 가져오기 키.

edinet 사용 시

CKAN_PORTAL_URL

CKAN 포털 기본 URL.

ckan 사용 시

LLM_BASE_URL, LLM_API_KEY, LLM_MODEL

추출 / 워크플로우 플래너용 공용 LLM 엔드포인트.

LLM 기능 사용 시

LEADER_MODELS, LEADER_MODEL_HIGH/BALANCE/FAST

워크플로우 플래너(build_workflow_from_goal)용 계층별 모델 오버라이드. 이름은 유지되며 설명 레이블만 "워크플로우 플래너"입니다.

선택 사항

ALERTS_FEISHU_WEBHOOK_URL

알림 채널용 Feishu 웹훅.

feishu 알림 사용 시

DASHBOARD_PORT

대시보드 앱용 포트.

선택 사항


AI 에이전트용

이 저장소에서 작업하는 AI 에이전트(예: Claude Code)라면:

  • 워크플로우 경로로 데이터를 가져오세요. fd-daas-based-data-fetch를 사용하세요: sqlite3를 사용하여 daas.db에서 엔티티 + 지표를 확인한 다음 workflow_run(name, params)을 호출합니다 — 매니페스트는 gateway_call → fd-open-data-mcp(L0)를 통해 페치를 라우팅하고 scraw_<slug> / observations에 영속화합니다. 다단계 페치의 경우 build_workflow_from_goal이 매니페스트를 생성합니다.

  • 워크플로우: 확인 → 페치(L0 경유) → 영속화. daas.db에서 엔티티+지표를 확인하고, 게이트웨이를 통해 페치하며, scraw_<slug>(원시 데이터) 또는 observations(계산된 지표)에 영속화합니다.

  • 그 외 모든 작업에는 MCP 서버를 사용하세요 — 카탈로그 탐색, 지표/컬렉션/규칙 생성, cron 스케줄링, 알림, 대시보드 구축/검색, PDF 의미 검색, 컴포지트 작성, 연구 번들. 이들은 fd-daas-mcp 도구(9개 그룹, 161개)입니다.

  • 저장소 루트에서 sqlite3로 daas.db를 쿼리하세요(sqlite3 daas.db "…"). FK 캐스케이드를 위해 PRAGMA foreign_keys=ON을 사용하세요.

  • 권위 있는 아키텍처 + 스키마 참조: CLAUDE.md(모든 테이블을 나열하는 ## daas.db 섹션이 있음) 및 construction/mcp.md(계층형 L0/L1/L2/L3 참조).


라이선스

Apache 2.0.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Economic data MCP server that connects FRED, BLS, BEA, IMF, World Bank, and ECB to any MCP-compatible client, with built-in methodology rules to guide LLMs in selecting appropriate economic indicators.
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A comprehensive cryptocurrency market-data MCP server with 49 tools across six data sources, enabling LLMs to answer market questions via natural language.
    49
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Unified MCP server for querying CSV, Postgres, and REST API data sources via embedded DuckDB, enabling cross-source SQL joins with no external query service.
    7
    14 npm
    MIT