Skip to main content
Glama

DAAS - 数据即服务

面向金融、经济和统计数据的分层数据平台——一个 SQLite 文件(daas.db)位于整合后的 MCP 服务器之后,数据获取向下委托给 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,EN+ZH 双语)。使用 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 表面,在整合服务器上进程内提供服务。通过 composite_*_manifest 进行 CRUD。

获取技能(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 + 上游仓库,配置虚拟环境,初始化 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 数据模型

一个 SQLite 文件,位于 DAAS_DATABASE_URL 指定的路径(相对 sqlite:/// 路径相对于仓库根目录解析;PRAGMA foreign_keys=ON 用于外键级联,PRAGMA journal_mode=WAL + busy_timeout=10000 以避免“database is locked”)。表按角色分组:

角色

表

内容

注册表 / 目录

sources, daas_functions, daas_function_columns, entities, entity_datasource_links, indicator_rules

数据源/函数/列目录;股票/国家及其来源标识符;指标绑定(表 + 列 + 操作 + 参数)

计算序列

observations

指标输出——每行一个 (source, function_name, indicator, date) 数据点;由 run_indicator.py 更新插入。仪表盘和警报读取此表。

获取的源数据

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 包 + markdown 报告。

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-*

基础设施:创建/优化技能,重置/scraw/数据源构建器,OpenSpec 变更生命周期。


MCP 工具组(fd-daas-mcp)

整合服务器暴露 9 个组共 161 个工具(可选 pdf 组为 failed=0, skipped_optional=1)。目录是组级别的(每个工具的详细信息通过服务器自身的自省 / selfcheck 获取)。

组

前缀

工具

用途

daas

daas_*

87

数据源/函数/列/实体/指标目录、指标计算、LLM 提取、集合、实体覆盖、统一规则。

dashboard

dashboard_*

11

独立 HTML 仪表板注册表(CRUD)、表查询、统计、索引重建。

alerts

alerts_*

10

基于观测序列的告警规则引擎 + 7 个通知渠道(Telegram/Discord/Slack/Twitter/DingTalk/Feishu/WeCom)。

cron

cron_*

13

基于数据库的任务 + 调度注册表;临时 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_*。Harness 注册表 / 快照 / 溯源能力已删除。

启动:fd-daas-mcp/bin/fd-daas-mcp-server(stdio)。服务器和 fd-daas-mcp CLI 都使用 registry.build(),因此这两个入口不会产生偏差。


环境变量

仓库根目录下的单个 .env 文件保存所有配置;脚本和 MCP 服务器会自动加载它。(标记为“可选”的键仅在其所启用的功能中需要。)

键

用途

是否必需?

DAAS_DATABASE_URL

sqlite:/// URL 指向 daas.db(相对路径基于仓库根目录解析,或使用绝对路径)。可选:未设置时,默认为 ./daas.db(可写的当前工作目录)或 ~/.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 webhook。

使用 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 语义搜索、composite 创作、研究包。这些就是 fd-daas-mcp 工具(9 组共 161 个)。

  • 从仓库根目录使用 sqlite3 查询 daas.db(sqlite3 daas.db "…")。使用 PRAGMA foreign_keys=ON 来启用 FK 级联。

  • 权威架构 + schema 参考: 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