fd-daas-mcp
OfficialDAAS - 서비스형 데이터(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-mcpMCP 서버를 통해 구동하며, 두 경로 모두 동일한 데이터베이스를 읽고 씁니다.
업스트림:
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-mcpClick 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를 참조하세요.
설치 및 빠른 시작
요구 사항: 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 사용). 테이블은 역할별로 그룹화됩니다:
역할 | 테이블 | 내용 |
레지스트리 / 카탈로그 |
| 데이터소스/함수/열 카탈로그, 주식/국가 + 해당 소스 식별자, 지표 바인딩(테이블 + 열 + 연산 + 매개변수) |
계산된 시계열 |
| 지표 출력 — 행당 하나의 |
수집된 소스 데이터 |
| 수집으로 가져온 원시 행( |
컬렉션 + 규칙 |
| 명명된 엔터티/지표 그룹 + 추가/제거 감사 로그, 통합 |
MCP 운영 |
| 대시보드 레지스트리, 알림 엔진, cron 상태, 게이트웨이/워크플로/복합/리서치 상태 |
저장소 루트에서 직접 쿼리: sqlite3 daas.db "SELECT …".
스킬 (.claude/skills/)
스킬은 일반 Markdown(SKILL.md) + Python 스크립트입니다. 수집 스킬은 매개변수를 수집하고 workflow_run을 호출하는 얇은 셸입니다. 더 이상 Python 데이터 라이브러리를 직접 호출하지 않습니다(수집은 L1→L0).
스킬 | 용도 |
|
|
| 엔터티 → 커버리지 → 지표 워크플로(sqlite3 + 핵심 스크립트 사용). |
| 분석 → [컬렉션] → 지표 → 대시보드 → |
| 대화를 통해 연구 목표를 명확히 함 → |
| 수집된 시계열을 |
| 독립 실행형 ECharts HTML 대시보드를 만들고 등록합니다. |
| 기존 대시보드 찾기/열기/검사(읽기 전용). |
| 규칙 기반 엔터티 컬렉션 정의 / 일상적인 컬렉션 작업. |
| 지표 컬렉션을 구성하고 해석된 점수로 CSV/markdown을 내보냅니다. |
| 통합 규칙(json/script/position/llm)을 작성하고, 컬렉션에 연결하고, 드라이런하고, 동기화합니다. |
| PDF/텍스트를 로컬 벡터 저장소(sqlite-vec)에 수집하고 의미론적으로 검색합니다. |
| Scrapling을 통해 봇 방지 보호 페이지(Cloudflare/JS 렌더링)를 스크랩합니다. |
| daas 스킬 생성/최적화 및 검토/테스트. |
| 사용자 MCP 구성을 스캐폴딩합니다(L3): 인터뷰 → 매니페스트 → 등록 → 자체 점검. |
| 인프라: 스킬 생성/최적화, 리셋/스크로우/데이터소스 빌더, OpenSpec 변경 수명 주기. |
MCP 도구 그룹 (fd-daas-mcp)
통합 서버는 9개 그룹에 걸친 161개 도구(선택적 pdf 그룹의 경우 failed=0, skipped_optional=1)를 노출합니다. 카탈로그는 그룹 수준입니다(도구별 세부 정보는 서버 자체 인트로스펙션/selfcheck 참조).
Group | Prefix | Tools | Purpose |
daas |
| 87 | 데이터소스/함수/컬럼/엔티티/지표 카탈로그, 지표 계산, LLM 추출, 컬렉션, 엔티티 커버리지, 통합 규칙. |
dashboard |
| 11 | 독립형 HTML 대시보드 레지스트리(CRUD), 테이블 쿼리, 통계, 인덱스 재생성. |
alerts |
| 10 | 관측 시리즈 기반 알림 규칙 엔진 + 7개 알림 채널(Telegram/Discord/Slack/Twitter/DingTalk/Feishu/WeCom). |
cron |
| 13 | DB 기반 작업 + 일정 레지스트리; 임시 |
composite |
| 16 | 사용자 MCP 구성(L3): 업스트림에서 도구 선별 + 워크플로우 임베드 + 프롬프트. |
research |
| 9 | 컬렉션/지표/대시보드/파이프라인 + markdown 리포트를 묶는 영구 연구 번들. |
gateway |
| 7 | L0 업스트림 레지스트리 CRUD + |
workflow |
| 8 | 매니페스트 기반 다단계 데이터 페치: 등록/실행/재개/검사(기존 |
| — | 로컬 PDF/텍스트 의미 검색(sqlite-vec + sentence-transformers). 선택 사항 — |
레거시
leader그룹은 해체되었습니다. 게이트웨이 라우팅 부분은gateway_*가, 워크플로우 매니페스트 부분은workflow_*가 되었습니다. 하네스 레지스트리 / 스냅샷 / 프로비넌스 기능은 삭제되었습니다.
실행: fd-daas-mcp/bin/fd-daas-mcp-server (stdio). 서버와 fd-daas-mcp CLI 모두 registry.build()를 사용하므로 두 인터페이스는 서로 어긋날 수 없습니다.
환경 변수
단일 저장소 루트 .env 파일에 모든 구성이 들어 있으며, 스크립트와 MCP 서버가 이를 자동으로 로드합니다. (선택 사항으로 표시된 키는 해당 기능을 활성화할 때만 필요합니다.)
키 | 용도 | 필수? |
|
| 선택 사항 |
| 데이터 라이브러리용 아웃바운드 프록시. | 선택 사항 |
| SEC EDGAR 식별 문자열( | edgar 사용 시 |
| 일본 EDINET 문서 가져오기 키. | edinet 사용 시 |
| CKAN 포털 기본 URL. | ckan 사용 시 |
| 추출 / 워크플로우 플래너용 공용 LLM 엔드포인트. | LLM 기능 사용 시 |
| 워크플로우 플래너( | 선택 사항 |
| 알림 채널용 Feishu 웹훅. | feishu 알림 사용 시 |
| 대시보드 앱용 포트. | 선택 사항 |
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.
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 Connectors
Real SEC, 13F, insider, congress & macro data your AI agent can cite. Hosted MCP, 24 tools.
MCP server connecting AI agents to non-custodial staking data across 130+ networks.
Hosted MCP server for personal tools: budgets, savings goals, spaced repetition, tips, countdowns.
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/FindDataTechnology/fd-daas-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server