fd-daas-mcp
OfficialClick on "Install 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
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.
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.
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 161 tools across 9 groups (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.
Install & Quick Start
Requirements: Python 3.10+ and uv. dartlab fetches need 3.12 — run them with uv run --python 3.12 --with dartlab ....
One-click install (clones DAAS + upstreams, provisions venvs, inits daas.db, localizes .mcp.json):
curl -fsSL https://raw.githubusercontent.com/FindDataTechnology/fd-daas-mcp/master/install.sh | shEnv overrides: DAAS_DEST (default ~/code/DAAS), DAAS_BRANCH, FINDDATA_HOME (default ~/finddata). Manual steps below.
# 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\"}'))
"The Quick Start commands above have been verified against this repo: SPY_ma5 is a real indicator_rules row, and the fd-daas-mcp registry reports 161 tools across 9 sources (failed=0, skipped_optional=1 for the optional pdf group).
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 (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 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. The fetch skills are thin shells that gather parameters and call workflow_run — they no longer call Python data libraries directly (fetch goes L1→L0).
Skill | Purpose |
| Resolve an entity + indicator against |
| Entity → coverage → indicator workflow (sqlite3 + the core scripts). |
| 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 |
| Scrape anti-bot-protected pages (Cloudflare/JS render) via Scrapling. |
| Create/optimize and review/test daas skills. |
| Scaffold a user MCP composition (L3): interview → manifest → register → selfcheck. |
| Infra: create/optimize skills, reset/scraw/datasource builders, OpenSpec change lifecycle. |
MCP Tool Groups (fd-daas-mcp)
The consolidated server exposes 161 tools across 9 groups (failed=0, skipped_optional=1 for the optional pdf group). 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 (161 across 9 groups).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 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