fd-daas-mcp
A single MCP server + CLI for skill-driven data access across financial,
economic, and statistical sources. Browse thousands of indicators, build entity
& indicator collections, run research workflows, and share dashboards - all
behind one stdio server with 181 tools across 8 groups (187 with the
optional pdf extra).
fd-daas-mcp is the engine behind the DAAS
skill-driven data-fetch workflow. Point any MCP client (Claude Code, etc.) at
it and the tools show up as <group>_<tool> calls - e.g. daas_list_sources,
alerts_create_alert_rule, research_create.
Install
pip install fd-daas-mcp
Optional extras (all lazy-loaded - a missing extra degrades to a per-feature error, never a startup crash):
pip install "fd-daas-mcp[pdf]" # local PDF/text vector search (sqlite-vec)
pip install "fd-daas-mcp[crew]" # CrewAI router for the leader group
pip install "fd-daas-mcp[akshare]" # live A-share OHLCV/fundamentals
pip install "fd-daas-mcp[position]" # CSS/xpath/json-path rule extraction
pip install "fd-daas-mcp[repl]" # REPL history/autocomplete
pip install "fd-daas-mcp[dev]" # pytest + mkdocs for contributors
60-second quickstart
# 1. Install
pip install fd-daas-mcp
# 2. Point your MCP client at it. For Claude Code, add to your .mcp.json:
// .mcp.json
{
"mcpServers": {
"fd-daas-mcp": {
"command": "fd-daas-mcp-server",
"args": []
}
}
}
# 3. Provision the database (creates daas.db + full schema + starter sources.
# DAAS_DATABASE_URL is optional - defaults to ./daas.db or ~/.fd-daas-mcp/):
fd-daas-mcp init
fd-daas-mcp doctor # read-only health check (path, schema, row counts)
# 4. Or use the CLI directly:
fd-daas-mcp --help # see every group + tool
fd-daas-mcp daas list_sources # invoke a tool: <group> <tool> [key=value ...]
fd-daas-mcp # drop into the REPL (needs [repl] extra)
On server startup the schema auto-creates and you'll see the registration report:
registry: 181 tools across 8 sources (failed=0, skipped_optional=1)
(181 tools with the default install; 187 with the pdf extra installed. The
pdf group is optional and skipped when sqlite-vec is absent.)
Tool groups
| Group | Surface prefix | What it does |
|---|---|---|
daas |
daas_* |
Datasource/function/column catalog, entities, indicators, collections, rules, pipelines |
alerts |
alerts_* |
Rule-based alerting over indicator series (Feishu/Discord/Slack/Telegram/DingTalk/WeCom/Twitter) |
cron |
cron_* |
Scheduled task execution + history |
composite |
composite_* |
Compose + chain tools across upstream MCPs |
dashboard |
dashboard_* |
Standalone-HTML dashboard registry + query |
leader |
leader_* |
CrewAI DataCrew router, specialist agents, workflows, snapshots |
pdf |
pdf_* |
Local PDF/text semantic vector search (optional - needs sqlite-vec) |
research |
research_* |
Persisted research bundles + generated markdown reports |
The CLI tree mirrors this: fd-daas-mcp <group> <tool>. Both server and CLI
are generated from the same registry.build(), so they cannot drift.
Skills
The skills/ directory (in the repo, not the wheel) contains 15 Claude Code
skills that turn the raw tools into guided workflows - data fetch, research
orchestration, dashboard building, rule authoring, and more. To use them:
git clone https://github.com/FindDataOfficial/fd-daas-mcp.git
# Then point Claude Code at skills/ in the clone (or symlink into ~/.claude/skills/).
See CONTRIBUTING.md and the docs site for details.
Architecture
src/fd_daas_mcp/ # the installable package
server.py # FastMCP app - registers every tool as <group>_<tool>
cli.py # Click CLI - auto-generated from registry.build()
registry.py # AST-harvests tools from each mcp/<group>/ (per-group sys.modules isolation)
selfcheck.py # offline invariants (run_invariants())
models.py # vendored SQLAlchemy schema (Base + ORM for every domain)
mcp/ # tool-group source (shipped as package data)
alerts/ cron/ composite/ daas/ dashboard/ leader/ pdf/ research/
The registry loads each group's server.py and harvests @app.tool-decorated
functions (inline groups) or the *_tools.py modules they import (non-inline
groups), with per-group sys.modules isolation so leaf modules like
database.py don't collide across groups. The cron group is loaded with
suppress=True to neutralize APScheduler's import-time thread while keeping
its idempotent DDL.
Development
git clone https://github.com/FindDataOfficial/fd-daas-mcp.git
cd fd-daas-mcp
uv sync --extra dev # editable install + dev deps (pytest, mkdocs, twine)
uv run pytest # offline test suite
uv run python -m fd_daas_mcp.selfcheck
See CONTRIBUTING.md for the full guide.
License
MIT - © FindDataOfficial.
Metadata
Release files for fd-daas-mcp 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| fd_daas_mcp-0.1.1.tar.gz | 325.6 kB | Without provenance | Details for fd_daas_mcp-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| fd_daas_mcp-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for fd_daas_mcp-0.1.1-py3-none-any.whl |
Total release size: 686.7 kB
Release files / fd_daas_mcp-0.1.1.tar.gz
| Download URL | fd_daas_mcp-0.1.1.tar.gz |
|---|---|
| Size | 325.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0f390a5a570b5f6cfa652e27c73eb59e8c822d1c034e6ad34e4784bbe6dc41ef
|
|
BLAKE2b-256 checksum How to use checksums |
989eb187e58a4556769c50ff963215b4ec90559a67843a4e1ad883fc7a17db52
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / fd_daas_mcp-0.1.1-py3-none-any.whl
| Download URL | fd_daas_mcp-0.1.1-py3-none-any.whl |
|---|---|
| Size | 361.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c5b679b47c7445fa96e6c6992364d24d7ffcb4a4dc4104d2a41a64d509c2ddb2
|
|
BLAKE2b-256 checksum How to use checksums |
fef2b86df6c654a81c0e8b7e15cf970e0758e5909afdfa5e61a78d3c4a37ab34
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for fd-daas-mcp 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.