fd-daas-mcp
OfficialProvides a local data platform backed by a single SQLite database (daas.db). The server uses SQLite to store and query registry/catalog tables, computed indicator observations, workflows, dashboards, alerts, research bundles, and other platform state, with schema initialization, health checks, and SQL access via the shared database file.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fd-daas-mcpCalculate the 5-day moving average for SPY and show the latest value."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
DAAS - Data As a Service
Facet (θ°¦ι’) product line Β· the local self-hosted data platform line of FindData β one SQLite file behind a consolidated MCP server.
π Quick Start: QUICKSTART.md (curl β install β ask your AI) Β· δΈζζζ‘£: README.zh-CN.md
Layered data platform for financial, economic, and statistical data β a single SQLite file (daas.db) behind a consolidated MCP server, with data fetch delegated down to the fd-open-data-mcp upstream.
What is this? A local data platform that turns Python data libraries (
akshare,yfinance,edgar,edinet-tools,dartlab,world_bank_data,ckanapi) into a queryable, indicator-computing, dashboard-ready store backed by one SQLite file. You drive it through Claude Code skills (thin shells that call workflow manifests) or through the consolidatedfd-daas-mcpMCP server β both paths read/write the same database.
One command β your AI agent runs the whole platform
curl -fsSL https://raw.githubusercontent.com/FindDataTechnology/fd-daas-mcp/master/install.sh | shThat single command clones DAAS + the fd-open-data-mcp upstream, provisions both venvs, inits daas.db, and localizes .mcp.json to your paths. When it prints done: ~/code/DAAS, 160+ MCP tools and 13 product Claude Code skills are deployed and wired up β no further setup. (Exact tool count is runtime-defined β selfcheck is the source of truth; latest verified run: 161. .claude/skills/ holds 32 directories in total, of which 13 are the product skills.)
Now open the folder in your AI agent and ask in plain language:
cd ~/code/DAAS
claudeThen just say things like:
"fetch SPY's daily OHLC and compute a 5-day SMA"
"build a dashboard of these indicators"
"alert me when RSI crosses 70"
"schedule this fetch nightly"
The agent has both surfaces ready β the 160+ MCP tools across 9 groups (daas Β· cron Β· alerts Β· dashboard Β· composite Β· research Β· pdf Β· gateway Β· workflow) auto-load from .mcp.json (runtime count is authoritative β selfcheck), and the 13 product skills under .claude/skills/ are thin playbooks the agent invokes when a task matches (fd-daas-based-data-fetch handles resolve β fetch β persist, fd-daas-research orchestrates a full study, etc.).
Verify the install is healthy (or just ask the agent to run them):
fd-daas-mcp/.venv/bin/fd-daas-mcp doctor # path + schema + row counts
fd-daas-mcp/.venv/bin/python -m daas.fd_daas_mcp.selfcheck # tool count (runtime is authoritative; latest: 161), failed=0A real first fetch (the agent runs the same thing when you ask it to):
uv run python .claude/skills/fd-daas-based-data-fetch/scripts/run_indicator.py SPY_ma5
sqlite3 daas.db "SELECT source, COUNT(*) FROM observations GROUP BY source"The Quick Start commands above are verified against this repo:
SPY_ma5is a realindicator_rulesrow, and thefd-daas-mcpregistry reports all 9 groups healthy (failed=0, skipped_optional=1for the optional
Requirements: Python 3.10+ and uv β the script installs uv itself if it's missing. Env overrides: DAAS_DEST (default ~/code/DAAS), DAAS_BRANCH (default master), FINDDATA_HOME (default ~/finddata). dartlab fetches need 3.12: uv run --python 3.12 --with dartlab .... Optional credentials (HTTP_PROXY, EDGAR_IDENTITY, EDINET_API_KEY, LLM_*, ALERTS_FEISHU_WEBHOOK_URL) go in a repo-root .env β see Environment Variables.
Non-Claude-Code MCP client? The 160+ tools work in any MCP-aware client (Cursor, Cline, β¦). The skills are a Claude-Code convenience layer β optional, not required to drive the server.
git clone -b master https://github.com/FindDataTechnology/fd-daas-mcp.git ~/code/DAAS
cd ~/code/DAAS
# 1. venv (data libs are declared deps)
uv sync
# 2. database β creates daas.db (full schema + dep-free starter catalog).
# 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
# 3. .env β add the source keys you need (see Environment Variables)
# 4. 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 (target: failed=0)If you skipped install.sh, the fd-open-data-mcp upstream still needs to be cloned (it's a path-dependency of fd-daas-mcp). The curl script does this for you; see install.sh for the exact sibling layout under ~/finddata.
Upstream: The
fd-open-data-mcpdata-fetcher is a sibling repo at~/finddata/fd-open-data-mcp(cloned automatically byinstall.sh).Docs site: The full, role-based documentation lives at
docs-site/(MkDocs Material, EN+ZH bilingual). Read it locally withuv run mkdocs serve(browses at/DAAS/), or build strictly withuv run mkdocs build --strict. Seedocs-site/README.mdfor build/serve/deploy.
Related MCP server: coin-mcp
Architecture
Strict downward dependency β a layer never reaches up.
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 (sibling repo): the sole data-fetch surface. A concept-based semantic fetcher with ranking/failover/caching; holds the entity master (
entities,entity_datasource_links). Served HTTP at:8300(stdio fallback). Replaces the 11 former per-source data-fetch MCPs.L1 β fd-daas-mcp (this repo): the consolidated stdio server, sole entry in repo-root
.mcp.json. Exposes 160+ tools across 9 groups (runtime count is authoritative βselfcheck) (daas Β· cron Β· alerts Β· dashboard Β· composite Β· research Β· pdf Β· gateway Β· workflow) behind one server and onefd-daas-mcpClick CLI. The thin consolidation layer isfd-daas-mcp/daas/fd_daas_mcp/(server.py/registry.py/cli.py/selfcheck.py); each group's tool code lives in-package atfd-daas-mcp/<group>-mcp/.L2 β workflow manifests: manifests live in the
workflowstable indaas.db(registered viaworkflow_register, run viaworkflow_run).build_workflow_from_goaldecomposes a natural-language goal into a manifest via an LLM.L3 β user MCP composition: a composite manifest (
{name, upstreams, tools, workflows, prompt}) curates a named MCP surface served in-proc on the consolidated server. CRUD viacomposite_*_manifest.
The fetch skills (fd-daas-based-data-fetch, fd-daas-fetch-data, fd-daas-research) are thin shells: parameter-gathering β workflow_run(name, params) β checkpoint handling. They no longer call Python data libraries directly β fetch goes down through L1βL0.
For the full architecture, conventions, and the daas.db schema reference, see CLAUDE.md and construction/mcp.md.
Project Structure
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 (160+ 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 Data Model
One SQLite file at the path in DAAS_DATABASE_URL (relative sqlite:/// paths resolve against repo root; PRAGMA foreign_keys=ON for FK cascade, PRAGMA journal_mode=WAL + busy_timeout=10000 to dodge "database is locked"). Tables group by role:
Role | Tables | What they hold |
Registry / catalog |
| Datasource/function/column catalog; stocks/countries + their source identifiers; indicator bindings (table + columns + op + params) |
Computed series |
| Indicator output β one |
Fetched source data |
| Raw rows pulled by a fetch (auto-created by |
Collections + rules |
| Named groups of entities/indicators + add-in/remove-out audit log; the unified |
MCP operational |
| Dashboard registry, alert engine, cron state, gateway/workflow/composite/research state |
Query it directly from the repo root: sqlite3 daas.db "SELECT β¦".
Skills (.claude/skills/)
Skills are plain Markdown (SKILL.md) + Python scripts β thin playbooks the agent invokes automatically when a task matches. The fetch skills gather parameters and call workflow_run; they no longer call Python data libraries directly (fetch goes L1βL0). 13 product skills ship with the repo (8 data-consumption + 5 creation; .claude/skills/ holds 32 directories in total β the other 19 are the 5 openspec-* workflow skills and 14 local-dev helpers, which are repo tooling rather than product surface):
Skill | Purpose |
| Resolve an entity + indicator against |
| Entity β coverage β indicator workflow (sqlite3 + the core scripts). |
| A-share OHLCV/fundamentals via the external |
| Orchestrate analyze β [collection] β indicators β dashboard β persist as a |
| Clarify a research goal via dialogue β |
| Persist a fetched series to a |
| Build a standalone ECharts HTML dashboard + register it. |
| Find / open / inspect existing dashboards (read-only). |
| Define a rule-based entity collection / day-to-day collection operations. |
| Curate an indicator collection + export CSV/markdown with resolved scores. |
| Author a unified rule (json/script/position/llm), attach to a collection, dry-run, sync. |
| Ingest a PDF/text into a local vector store (sqlite-vec) and search semantically. Requires the |
| Spec-driven change lifecycle: propose β apply β sync β archive. |
MCP Tool Groups (fd-daas-mcp)
The consolidated server exposes 160+ tools across 9 groups β runtime count is authoritative via selfcheck (latest verified run: 161 tools, failed=0, skipped_optional=1 for the optional pdf group; the per-group counts below reflect that run). Catalog is group-level (per-tool detail via the server's own introspection / selfcheck).
Group | Prefix | Tools | Purpose |
daas |
| 87 | Datasource/function/column/entity/indicator catalog, indicator compute, LLM extraction, collections, entity coverage, unified rules. |
dashboard |
| 11 | Standalone-HTML dashboard registry (CRUD), table query, stats, index regeneration. |
alerts |
| 10 | Alert rule engine over observation series + 7 notification channels (Telegram/Discord/Slack/Twitter/DingTalk/Feishu/WeCom). |
cron |
| 13 | DB-backed task + schedule registry; ad-hoc |
composite |
| 16 | User MCP composition (L3): curate tools from upstreams + embed workflows + prompt. |
research |
| 9 | Persisted research bundle tying collections/indicators/dashboard/pipeline + markdown report. |
gateway |
| 7 | L0 upstream registry CRUD + call routing to |
workflow |
| 8 | Manifest-based multi-step data fetches: register/run/resume/inspect (former |
| β | Local PDF/text semantic search (sqlite-vec + sentence-transformers). Optional β gated on the |
The legacy
leadergroup is dissolved: its gateway-routing half becamegateway_*, its workflow-manifest half becameworkflow_*. Harness-registry / snapshot / provenance capabilities are deleted.
Launch: fd-daas-mcp/bin/fd-daas-mcp-server (stdio). Both the server and the fd-daas-mcp CLI consume registry.build(), so the two surfaces cannot drift.
Environment Variables
A single repo-root .env holds all config; scripts and the MCP server auto-load it. (Keys marked optional are only needed for the features they enable.)
Key | Purpose | Required? |
|
| optional |
| Outbound proxy for data libraries. | optional |
| SEC EDGAR identity string ( | for edgar |
| Japan EDINET document fetch key. | for edinet |
| CKAN portal base URL. | for ckan |
| Shared LLM endpoint for extraction / workflow planner. | for LLM features |
| Per-tier model overrides for the workflow planner ( | optional |
| Feishu webhook for the alerts channel. | for feishu alerts |
| Port for the dashboard app. | optional |
For AI Agents
If you are an AI agent (e.g. Claude Code) operating in this repo:
Fetch data through the workflow path. Use
fd-daas-based-data-fetch: resolve the entity + indicator againstdaas.dbviasqlite3, thenworkflow_run(name, params)β the manifest routes the fetch down throughgateway_callβfd-open-data-mcp(L0) and persists intoscraw_<slug>/observations. For multi-step fetches,build_workflow_from_goalemits a manifest.Workflow: resolve β fetch (via L0) β persist. Resolve entity+indicator in
daas.db; fetch via the gateway; persist intoscraw_<slug>(raw) orobservations(computed indicator).Use the MCP server for everything else β catalog browsing, creating indicators/collections/rules, cron scheduling, alerts, building/finding dashboards, PDF semantic search, composite authoring, research bundles. These are the
fd-daas-mcptools (160+ across 9 groups; runtime count viaselfcheck).Query
daas.dbwithsqlite3from the repo root (sqlite3 daas.db "β¦"). UsePRAGMA foreign_keys=ONfor FK cascade.Authoritative architecture + schema reference:
CLAUDE.md(it has a## daas.dbsection listing every table) andconstruction/mcp.md(the layered L0/L1/L2/L3 reference).
License
Apache 2.0.
This server cannot be deployed
Maintenance
Related MCP Connectors
Hosted MCP: 3665 structured web-data tools across 472 platform groups.
Hosted MCP servers for US federal data: 19 servers, 147 tools, one endpoint.
75 MCP tools: SEC financials, FRED economics, IRS 990, FDA, FX, UK Companies House.
MCP server for querying and analyzing data from ad platforms, analytics tools, and spreadsheets
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEconomic 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
- AlicenseAqualityDmaintenanceA comprehensive cryptocurrency market-data MCP server with 49 tools across six data sources, enabling LLMs to answer market questions via natural language.49MIT
- FlicenseAqualityDmaintenanceMCP server that enables semantic search over macroeconomic data using the Lambda Capture API.110-
- AlicenseAqualityBmaintenanceUnified MCP server for querying CSV, Postgres, and REST API data sources via embedded DuckDB, enabling cross-source SQL joins with no external query service.714 npmMIT