ð Statistics Canada API MCP Server
ãªã¢ãŒãð Statistics Canada API MCP Server ã«ã€ããŠ
WDS ãš SDMX ãéã㊠Statistics Canada ã®è¡šãæ€çŽ¢ããã«ããã®çµ±èšããŒã¿ãååŸãã MCP ãµãŒããŒãšåç¬ã®ã³ãã³ãã©ã€ã³ããŒã«ã§ãããã¹ãçãšããŒã«ã«çããããå®å šãªããŒã«ã«æ§æã§ã¯ SQLite ããŒã«ã䜿ããŸãã
äž»ãªæ©èœ
- 01Statistics Canada ã®è¡šãæ€çŽ¢
- 02衚ã®ã¡ã¿ããŒã¿ã𿬡å ã確èª
- 03çµã蟌ãã SDMX 芳枬å€ãååŸ
- 04ååŸããŒã¿ã«èªã¿åãå°çš SQL ãå®è¡
- 05ã³ãã³ãã©ã€ã³ãã CSV ãŸã㯠JSON ãããŠã³ããŒã
掻çšã·ãŒã³
- 01調æ»ããŒãã«é¢ä¿ããè¡šã®æ€çŽ¢
- 02æå®ããæç³»å芳枬å€ã®ååŸ
- 03ãµãŒããŒåŽ SQL ã«ããæ¯èŒãé äœä»ã
- 04端æ«ã§ã®åæçšã«è¡šããŒã¿ãããŠã³ããŒã
MCP 察å¿
MCP ã¯ã©ã€ã¢ã³ãã« WDS ã®ããŒã¿æ€çŽ¢æ©èœãš SDMX ããŒã¿ããŒã«ãæäŸããäžè¬çãªæ€çŽ¢ã»ããŠã³ããŒãæé ã®ããã³ãããåããŠããŸããå®å šãªããŒã«ã«æ§æã§ã¯ SQLite ããŒã«ãå©çšã§ããåç¬ã® statcan ã³ãã³ãã©ã€ã³ããŒã«ãªã LLM ãªãã§ããŒã¿ãããŠã³ããŒãã§ããŸãã
èšå®
ãªã¢ãŒããµãŒããŒã¯ã€ã³ã¹ããŒã«äžèŠã§ããã¯ã©ã€ã¢ã³ããéžãã§èšå®ãã³ããŒããããã¯ã³ã¯ãªãã¯ã§å°å ¥ã§ããŸãã
https://mcp-statcan.com/mcpclaude mcp add --transport http statcan https://mcp-statcan.com/mcp{"mcpServers":{"statcan":{"type":"http","url":"https://mcp-statcan.com/mcp"}}}Cursor ã§éã{"servers":{"statcan":{"type":"http","url":"https://mcp-statcan.com/mcp"}}}VS Code ã§éã{"mcpServers":{"statcan":{"type":"http","url":"https://mcp-statcan.com/mcp"}}}{"mcpServers":{"statcan":{"serverUrl":"https://mcp-statcan.com/mcp"}}}ã³ãã³ãã¯ã¿ãŒããã«ã§å®è¡ããJSON ã¯åã¯ã©ã€ã¢ã³ãã® MCP èšå®ã«è²Œãä»ããŠåèµ·åããŸããèªå¯ãå¿ èŠãªãµãŒããŒã¯ååæ¥ç¶æã«ãã°ã€ã³ãæ±ããŸãã
ããŒã«
25ãã®ããŒã«ã«ãã©ã¡ãŒã¿ãŒã¯ãããŸããã
詳现
Statistics Canada MCP ãµãŒããŒ
Statistics Canada ã® Web Data ServiceïŒWDSïŒããã³ SDMX REST API çšã® MCP ãµãŒããŒãš CLI ã§ããClaudeãCursorãVS Code CopilotãGemini ãªã©ããããã MCP ã¯ã©ã€ã¢ã³ãããã«ããã®çµ±èšããŒã¿ã«æ§é åãããæ¹æ³ã§ã¢ã¯ã»ã¹ã§ããŸããLLM ã䜿ããã«çŽæ¥ããŠã³ããŒãã§ãããåç¬ã§åäœãã statcan CLI ãå«ãŸããŠããŸãã
Render ã§ãã¹ããããŠããŸããã»ãšãã©ã®ãŠãŒã¶ãŒã¯ã€ã³ã¹ããŒã«äžèŠã§ããã¯ã€ãã¯ã¹ã¿ãŒããã芧ãã ããã
â ïž LLM ã¯ããŒã¿ãæé ããããšããããŸããéèŠãªæ°å€ã¯å¿ ãStatistics Canada ã®å ¬åŒæ å ±æºã§ç¢ºèªããŠãã ããã
ç®æ¬¡
- ã¯ã€ãã¯ã¹ã¿ãŒã
- 䜿çšäŸ
- ã¯ã©ã€ã¢ã³ãå¥ã®ã»ããã¢ãã
- Claude.ai ã«ãããã®ãµãŒããŒã®äœ¿ç𿹿³
- MCP ããã³ãã
- statcan CLI
- æ©èœãšããŒã«
- ãããžã§ã¯ãæ§æ
- æ¢ç¥ã®åé¡
- è²¢ç®è
ã¯ã€ãã¯ã¹ã¿ãŒã
èªåã«åã£ãæ¹æ³ãéžãã§ãã ããããªãã·ã§ã³ 1 ã§ã¯äœãã€ã³ã¹ããŒã«ããå¿ èŠã¯ãããŸããã
ãªãã·ã§ã³ 1 â ãã¹ãæžã¿ãµãŒããŒã䜿çšããïŒæšå¥šïŒ
Render äžã®å
¬éãµãŒããŒã«çŽæ¥æ¥ç¶ããŸããuv ãã¿ãŒããã«ãããŒã«ã«ã§ã®ã»ããã¢ãããäžèŠã§ãã
Claude Desktop / Claude.ai
- èšå® â ã³ãã¯ã¿ãŒ â ã«ã¹ã¿ã ã³ãã¯ã¿ãŒã远å ãéããŸã
- ååïŒ
mcp-statcan - URLïŒ
https://mcp-statcan.com/mcp - ä¿åããŠåèµ·åããŸã
Claude Code
claude mcp add statcan --transport http https://mcp-statcan.com/mcp --scope global
ãã¹ãæžã¿ãµãŒããŒã§ã¯ããã¹ãŠã® WDS + SDMX ããŒã«ãå©çšã§ããŸããããŒã¿ããŒã¹ããŒã«ïŒSQLiteïŒã䜿ãã«ã¯ããŒã«ã«ã§ã®ã»ããã¢ããïŒãªãã·ã§ã³ 3ïŒãå¿ èŠã§ããå ±æãµãŒããŒããã¯æå³çã«é€å€ãããŠããŸãã
ãªãã·ã§ã³ 2 â HTTP ã§ã»ã«ããã¹ãããïŒWDS + SDMXãDB ãªãïŒ
ãã¹ãæžã¿ããŒãžã§ã³ãšåãããŒã«ãåããããŒã«ã«ãµãŒããŒãå®è¡ããŸãã
ã¹ããã 1 â uvãã€ã³ã¹ããŒã«ããŸãïŒ
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
ã¹ããã 2 â ãµãŒããŒãèµ·åããŸãïŒ
uvx statcan-mcp-server --transport http
# Listening at http://localhost:8000
ã¹ããã 3 â ã¯ã©ã€ã¢ã³ãã http://localhost:8000/mcp ã«æ¥ç¶ããŸãã
ãªãã·ã§ã³ 3 â ããŒã«ã«ã§å®å šã«ã»ããã¢ããããïŒWDS + SDMX + SQLiteïŒ
ãªãã·ã§ã³ 2 ã®ãã¹ãŠã«å ããSQL ã§ããŒã¿ãä¿åã»ç §äŒããããã®ããŒã¿ããŒã¹ããŒã«ãå©çšã§ããŸããstdio çµç±ã§å®è¡ããŸãã
ã¹ããã 1 â uv ãã€ã³ã¹ããŒã«ããŸãïŒäžèšãšåãã§ãïŒã
ã¹ããã 2 â 以äžã®ã¯ã©ã€ã¢ã³ãå¥ã®ã»ããã¢ããã«ãã stdio çšã®èšå®ã¹ããããã䜿ã£ãŠãã¯ã©ã€ã¢ã³ããèšå®ããŸãã
ååäœ¿çšæã« uvx ããµãŒããŒãèªåçã«ããŠã³ããŒãããŠå®è¡ããŸãã
ãªãã·ã§ã³ 4 â statcan CLIïŒLLM äžèŠïŒ
ã¿ãŒããã«ãã StatCan ããŒã¿ãçŽæ¥ããŠã³ããŒãããŸããstatcan CLIãã芧ãã ããã
uvx statcan-mcp-server # installs the package
statcan search "labour force"
statcan metadata 14-10-0287-01 # run first to find dimension IDs
statcan download 14-10-0287-01 --key "1.1.1" --last 12 --output lfs.csv # run `statcan metadata <pid>` first to find real dimension IDs
statcan describe # machine-readable command reference for agents
䜿çšäŸ
ãã£ããã®äŸ
| ããŒã¿ã»ãã | ã¯ãšãª | ã㢠| ãœãŒã¹ |
|---|---|---|---|
| ã«ããã®æž©å®€å¹æã¬ã¹æåºé | "Create a simple visualization for greenhouse emissions for Canada as a whole over the last 4 years" | ãã£ãã | 衚 38-10-0097-01 |
| ã«ããã®ãµãŒãã¹ã®åœé貿æ | "Create a quick analysis for international trade in services for the last 6 months with a visualization" | ãã£ãã | 衚 12-10-0144-01 |
| ãªã³ã¿ãªãªå·ã®å»ºç¯å»ºèšäŸ¡æ Œææ° | "Generate a visualization for Ontario's Building Price index from Q4 2023 to Q4 2024" | ãã£ãã | 衚 18-10-0289-01 |
| ã«ããã®å€±æ¥ããã·ã¥ããŒã | "Create a Canadian Unemployment Dashboard using statcan mcp" | ãã£ãã | 衚 14-10-0287-01 |
ããã·ã¥ããŒãã®äŸ
| ã¿ã€ãã« | ãªã³ã¯ | ãœãŒã¹ |
|---|---|---|
| ã«ããã®éèŠé±ç©çµæž | ããã·ã¥ããŒã | 衚 36-10-0708-01 |
| ãããããã®ã®äŸ¡æ ŒïŒCPI ããã·ã¥ããŒã 2015â2026 | ããã·ã¥ããŒã | 衚 18-10-0004-01 |
| ã«ããã®ãã€ãªå»çã»ãã€ãªãã¯ãããžãŒç£æ¥ | ããã·ã¥ããŒã | 衚 27-10-0297-01 |
ã¯ã©ã€ã¢ã³ãå¥ã®ã»ããã¢ãã
ãã¹ãåãµãŒããŒïŒãªãã·ã§ã³ 1ïŒ
Claude Desktop â Settings â Connectors â Add Custom Connector
- ååïŒ
mcp-statcan - URLïŒ
https://mcp-statcan.com/mcp
Claude Code
claude mcp add statcan --transport http https://mcp-statcan.com/mcp --scope global
Cursor â .cursor/mcp.jsonïŒãããžã§ã¯ãïŒãŸã㯠~/.cursor/mcp.jsonïŒã°ããŒãã«ïŒïŒ
{
"mcpServers": {
"statcan": {
"url": "https://mcp-statcan.com/mcp"
}
}
}
VS Code (GitHub Copilot) â .vscode/mcp.jsonïŒ
{
"servers": {
"statcan": {
"type": "http",
"url": "https://mcp-statcan.com/mcp"
}
}
}
ã»ã«ããã¹ã HTTPïŒãªãã·ã§ã³ 2ïŒ
å ã«
uvx statcan-mcp-server --transport httpãèµ·åããŠãããã¯ã©ã€ã¢ã³ããèšå®ããŠãã ããã
ã»ãšãã©ã®ã¯ã©ã€ã¢ã³ãã§ã¯ãstdio ãš HTTP ãæ©æž¡ãããããã« mcp-proxy ãå¿
èŠã§ããClaude Code ã¯ãã€ãã£ãã«æ¥ç¶ã§ããŸãã
Claude Desktop â Settings â Developer â Edit ConfigïŒ
{
"mcpServers": {
"statcan": {
"command": "uvx",
"args": ["mcp-proxy", "--transport", "streamablehttp", "http://localhost:8000/mcp"]
}
}
}
Claude Code
claude mcp add statcan --transport http http://localhost:8000/mcp --scope global
Cursor / VS Code / Gemini â åã mcp-proxy ã©ãããŒã䜿ããhttp://localhost:8000/mcp ãæå®ããŸãã
å®å šããŒã«ã« / stdioïŒãªãã·ã§ã³ 3ïŒ
Claude Desktop â Settings â Developer â Edit ConfigïŒ
{
"mcpServers": {
"statcan": {
"command": "uvx",
"args": ["statcan-mcp-server", "--db-path", "/Users/<you>/.statcan-mcp/statcan_data.db"]
}
}
}
--db-pathã«ã¯çµ¶å¯Ÿãã¹ãæå®ããŠãã ãããClaude Desktop ã¯ãµãããã»ã¹ã®HOMEç°å¢å€æ°ãäžæžããããããããã©ã«ãã®ãã¹è§£æ±ºã«åé¡ãçããããšããããŸãã
Claude Code
claude mcp add statcan --scope global -- uvx statcan-mcp-server
Cursor / VS Code / Gemini â stdio ã³ãã³ããšã㊠uvx statcan-mcp-server ã䜿çšããŸãã
Claude.ai ããã®ãµãŒããŒã䜿çšããæ¹æ³
Claude.aiïŒãŠã§ãïŒã«ã¯ bash ãµã³ãããã¯ã¹ããªããããã·ã§ã«ã³ãã³ããå®è¡ã§ããŸããããã®ä»£ããã«ãMCP ããŒã«ã§ããŒã¿ãæ€çŽ¢ããPython ã¹ã¯ãªããããŒã«ã§ã³ã³ããã¹ããŠã£ã³ããŠãè¥å€§åãããã«ããŒã¿ãååŸããŸãã
ãã¿ãŒã³ïŒ
1. MCP tools (small payloads â metadata only):
search_cubes_by_title("labour force") â productId
get_sdmx_structure(productId=...) â dimension layout + codes
get_sdmx_key_for_dimension(...) â OR key for large dimensions
2. Python script (data never enters context):
url = "https://mcp-statcan.com/files/sdmx/<pid>/<key>?lastNObservations=12"
â validate URL domain â write to ./statcan_<pid>.csv â print summary only
3. Follow-up script (analysis from local file):
rows = list(csv.DictReader(open("./statcan_<pid>.csv")))
â filter / sort / aggregate â print only the result
é äœä»ããæ¯èŒãæé·çãªã©ã®èšç®ãå¿
èŠãªè³ªåã§ã¯ãquery_sdmx ããµãŒããŒäžã§ SQL ãå®è¡ããŠçãã ããè¿ããããçã®è¡ããŒã¿ãã³ã³ããã¹ããŠã£ã³ããŠã«å
¥ãããšã¯ãããŸããã
**Claude CodeïŒbash ãµã³ãããã¯ã¹ïŒ**ã§ã¯ã代ããã« statcan CLI ã䜿çšããŸãã
statcan search "labour force"
statcan metadata 14-10-0287-01 # run first to find dimension IDs
statcan download 14-10-0287-01 --key "1.1.1" --last 12 --output ./lfs.csv # run `statcan metadata <pid>` first to find real dimension IDs
awk -F',' 'NR>1 && $1=="Canada"' ./lfs.csv | sort -t',' -rn -k5 | head -10
MCP ããã³ãã
ãã®ãµãŒããŒã«ã¯ã察å¿ã¯ã©ã€ã¢ã³ãã§ã¹ã©ãã·ã¥ã³ãã³ããšããŠå©çšã§ãã5ã€ã®ããã³ãããä»å±ããŠããŸããããããã«ãClaude CodeïŒbashïŒãš Claude.ai ãŠã§ãïŒPython ã¹ã¯ãªããïŒåãã®2çš®é¡ã®æé ããããŸãã
| ããã³ãã | å 容 |
|---|---|
/statcan-data-lookup | æåããæåŸãŸã§ã®æé ïŒæ€çŽ¢ â æ§é ã®ç¢ºèª â ããŒã®äœæ â ããŒã«ã«ãã¡ã€ã«ãžã®ååŸ â åæ |
/sdmx-key-builder | SDMX ããŒã®æ§æïŒã¯ã€ã«ãã«ãŒããOR ããŒãæéãã©ã¡ãŒã¿ãŒãããŠã³ããŒã URL ã®åœ¢åŒ |
/statcan-download | ç¹å®ã®ããŒãã«ã®ããŠã³ããŒãïŒCLI ã³ãã³ããš Python ã¹ã¯ãªããã«ããä»£æ¿ææ®µ |
/statcan-explore | å®è¡åã®ãµã³ãã«ç¢ºèªïŒ3æéã®ååŸãåã®é 眮ããµã€ãºã®èŠç©ãã |
/statcan-vector-pipeline | è€æ°ç³»åã®ããŠã³ããŒããšç³»åéã®æ¯èŒ |
Claude Code ã§ã®äœ¿ç𿹿³ïŒ
/statcan-data-lookup topic="consumer price index" analysis_goal="trend last 5 years"
/statcan-download product_id=18100004 last_n=24
statcan CLI
LLM ã䜿ããã« StatCan ããŒã¿ãããŠã³ããŒãã§ããã¹ã¿ã³ãã¢ãã³ CLI ã§ãããã€ãåŠçã«é©ãã CSVïŒJSON ãæšæºåºåã«åºåãã鲿æ å ±ãšãšã©ãŒã¯æšæºãšã©ãŒåºåã«åºåããŸãã
ããŒãã«ã®æ¢çŽ¢ïŒæ€çŽ¢ãã¡ã¿ããŒã¿ã®ç¢ºèªãããŠã³ããŒãã®é ïŒïŒ
ãšãŒãžã§ã³ãã¢ãŒãïŒ--json ãšã³ãããŒããåä»ãçµäºã³ãŒããstatcan describeïŒïŒ
é²ç»ã¯ãVHS ã䜿ã£ãŠ assets/tapes/ å
ã®ã¹ã¯ãªããããçæãããŸãïŒvhs assets/tapes/cli-agent.tapeã
ã€ã³ã¹ããŒã«ïŒ
pip install statcan-mcp-server # or: uvx statcan-mcp-server (no install)
ã³ãã³ãïŒ
statcan search <term> Search tables by keyword
statcan metadata <product-id> Show table structure (dimensions + members)
statcan download <product-id> Download observations via SDMX
statcan vector <vector-id>... Download one or more vector series
statcan codeset Show StatCan code definitions (UOM, frequency, etc.)
statcan describe Commands, options, exit codes and JSON envelopes as JSON
äžè¬çãªäœ¿ãæ¹ïŒ
# Find a table
statcan search "consumer price index"
statcan search "labour force" --max-results 10 --format json
# Inspect structure before downloading
statcan metadata 18-10-0004-01
statcan metadata 18100004 --full # show all dimension members
# Download data (run `statcan metadata <pid>` first to find real dimension IDs)
statcan download 18-10-0004-01 --key "1.1.1" --last 12 --output cpi.csv
statcan download 18-10-0004-01 --key "1.1.1" --start 2020-01 --end 2024-12
statcan download 18-10-0004-01 --key "1.1.1" --last 5 --dry-run # preview SDMX URL
# Download by vector ID
statcan vector v41690973 --last 24 --output series.csv
statcan vector v41690973 v41690974 --last 12 --output multi.csv
# Decode numeric codes
statcan codeset --type uom
statcan codeset --type frequency --format json
åºå圢åŒïŒ csvïŒdownload/vector ã®ããã©ã«ãïŒãtableïŒsearch/metadata/codeset ã®ããã©ã«ãïŒãjsonãndjson
ãšãŒãžã§ã³ããšã¹ã¯ãªããåãïŒ ãµãã³ãã³ãã®åã« --json ãæå®ããïŒãŸã㯠STATCAN_OUTPUT=json ãèšå®ããïŒãšãæšæºåºåã«åäžã® JSON ãšã³ãããŒãããæšæºãšã©ãŒåºåã« hint ãå«ã JSON ãšã©ãŒãåºåãããå®å®ããçµäºã³ãŒããè¿ãããŸãïŒ0 æåã2 äœ¿çšæ¹æ³ã®èª€ãã3 èŠã€ãããªãã4 æåŠã5 å詊è¡å¯èœã6 空ïŒã--output ãæå®ãããšããã¡ã€ã«ã®æŠèŠïŒè¡æ°ãåæ°ãæéç¯å²ãç³»åæ°ïŒããšã³ãããŒãã«å«ãŸããããããã¡ã€ã«ãèªã¿æ»ãå¿
èŠã¯ãããŸãããè©³çŽ°ïŒæ©æ¢°å¯èªã¢ãŒãã
ãã€ãåŠçã®äŸïŒ
# Top 10 by value (run `statcan metadata <pid>` first to find real dimension IDs)
statcan download 14-10-0287-01 --key "1.1.1" --last 1 --format csv \
| awk -F',' 'NR>1' | sort -t',' -k5 -rn | head -10
# Extract unique geographies (run `statcan metadata <pid>` first to find real dimension IDs)
statcan download 14-10-0287-01 --key "1.1.1" --last 1 --format csv \
| awk -F',' 'NR>1 {print $1}' | sort -u
# Chain search â download (run `statcan metadata <pid>` first to find real dimension IDs)
PID=$(statcan search "CPI" --format json | python3 -c "import sys,json; print(json.load(sys.stdin)[0]['Product ID'])")
statcan download $PID --key "1.1.1" --last 12 --output cpi.csv
CLI ã®å®å šãªãªãã¡ã¬ã³ã¹ã«ã€ããŠã¯ãsrc/cli/README.md ãåç §ããŠãã ããã
æ©èœãšããŒã«
SDMX ããŒã« â ãµãŒããŒåŽã§ãã£ã«ã¿ãªã³ã°ããããŒã¿ååŸ
ãªã¯ãšã¹ãããç¯å²ã®ããŒã¿ã ããè¿ãããŸããããŒãã«å šäœãããŠã³ããŒãããå¿ èŠã¯ãããŸããã
| ããŒã« | 説æ |
|---|---|
get_sdmx_structure | ããŒãã«ã®ãã£ã¡ã³ã·ã§ã³ã³ãŒããªã¹ããšããŒæ§æãååŸããŸããget_sdmx_data ã®åã«åŒã³åºããŠãã ããã |
get_sdmx_data | productId ãšããŒã§ãã£ã«ã¿ãªã³ã°ãã芳枬å€ãã€ã³ã©ã€ã³ã§è¿ããç³»åããšã«ãŸãšããŸããåç³»åã®ã©ãã«ãVECTOR_IDãUOM ã¯äžåºŠã ãåºåããããã®åŸã«æ°å€ã® [period, value] ãã¢ãç¶ããŸãïŒèŠ³æž¬å€ã¯æå€§ 500 ä»¶ïŒã |
query_sdmx | 芳枬å€ãååŸããäžæçãªã€ã³ã¡ã¢ãªããŒãã«äžã§èªã¿åãå°çšã® SQL ã¯ãšãªã 1 ã€ãµãŒããŒåŽã§å®è¡ããŸããçµæã®ã¿ãè¿ããŸãããã¹ãåãµãŒããŒã§åäœããååŸè¡æ°ã«äžéã¯ãããŸããã |
get_sdmx_vector_data | SDMX ãä»ããŠåäžã® vectorId ã®èŠ³æž¬å€ãååŸããŸãïŒç³»åããšã«ãŸãšããåã圢åŒã§åºåïŒã |
get_sdmx_key_for_dimension | ãã£ã¡ã³ã·ã§ã³ã®ãã¹ãŠã®æ«ç«¯ã¡ã³ã㌠ID ããããã«è²Œãä»ããŠäœ¿ãã OR ããŒãšããŠè¿ããŸããåèšãšå°èšã¯é€å€ããããããåç®ãé äœä»ãã§äºéã«ãŠã³ããããŸããïŒäŸïŒNOCãCMAïŒã |
ããŒæ§æïŒget_sdmx_data ã«æž¡ããŸãïŒïŒ
"1.2.1"â å°å=1ãæ§å¥=2ã幎霢=1".2.1"â ãã¹ãŠã®å°åïŒã¯ã€ã«ãã«ãŒãïŒãæ§å¥=2ã幎霢=1"1+2.2.1"â å°å 1 ãŸã㯠2ãæ§å¥=2ã幎霢=1
æ³šïŒ ã¯ã€ã«ãã«ãŒãïŒ
.ïŒã䜿ããšãåèšã芪éèšãå«ãããã£ã¡ã³ã·ã§ã³ã®ãã¹ãŠã®ã¡ã³ããŒãè¿ãããŸããåç®ãé äœä»ãã«ã¯ãget_sdmx_key_for_dimensionã®æ«ç«¯ã³ãŒãã䜿çšããŠãã ããã倧ããªã¯ã€ã«ãã«ãŒãæå®ã§ã¯get_sdmx_dataã® 500 è¡äžéãè¶ ããããšããããŸãããã®å Žåã¯query_sdmxã䜿çšããŠãã ããã
WDS ã®æ€çŽ¢ãšã¡ã¿ããŒã¿
| ããŒã« | 説æ |
|---|---|
search_cubes_by_title | StatCan ã®ãã¹ãŠã®ããŒãã«ã察象ã«å šææ€çŽ¢ããŸããAND æ¡ä»¶ã§æ€çŽ¢ããçµæã¯æå€§ 25 ä»¶ã§ããã¢ãŒã«ã€ãæžã¿ã®ããŒãã«ãããçŸè¡ããŒãã«ãå ã«è¡šç€ºãããŸãã |
get_all_cubes_list / _lite | ããŒãã«äžèЧãããŒãžåå²ããŠååŸããŸãïŒoffset/limitãæ¢å®ã§ã¯ 1 ããŒãžããã 100 ä»¶ïŒã |
get_cube_metadata | ãã£ã¡ã³ã·ã§ã³æ
å ±ãã¡ã³ããŒäžèŠ§ãæ¥ä»ç¯å²ãååŸããŸããsummary=True ãæå®ãããšããã£ã¡ã³ã·ã§ã³ããšã®ã¡ã³ããŒæ°ãæå€§ 10 ä»¶ã«å¶éããŸãã |
get_code_sets | StatCan ã®æ°å€ã³ãŒãããã³ãŒãããŸããæ¢å®ã§ã¯èŠçŽãè¿ããŸãã倧ããªã»ããã§ã¯ code_set="uom", search="percent" ãæå®ããŠãã ããã |
WDS ã®ç³»å解決ãšå€æŽæ€åº
| ããŒã« | 説æ |
|---|---|
get_series_info | {productId, coordinate} ã®çµã vectorId ãšã¡ã¿ããŒã¿ã«è§£æ±ºããŸãã |
get_series_info_from_vector | vectorId ã productIdãcoordinateãã¿ã€ãã«ãé »åºŠã«è§£æ±ºããŸãã |
get_changed_cube_list | æå®ããæ¥ã«æŽæ°ãããããŒãã«ãååŸããŸãã |
get_changed_series_list | æ¬æ¥æŽæ°ãããç³»åãååŸããŸãïŒET 08:30 以éã«å©çšå¯èœïŒãéå»ã®æ¥ä»ã«ã€ããŠã¯ãget_changed_cube_list(date) ã䜿çšããŠãã ããã |
get_changed_series_data_from_cube_pid_coord | 座æšã«ã€ããŠæ¬æ¥å€æŽãããããŒã¿ãã€ã³ããååŸããŸãïŒET 08:30 ããåããŸãã¯å€æŽããªãå Žå㯠changed: falseïŒã |
get_changed_series_data_from_vector | vectorId ã«ã€ããŠæ¬æ¥å€æŽãããããŒã¿ãã€ã³ããååŸããŸãïŒET 08:30 ããåããŸãã¯å€æŽããªãå Žå㯠changed: falseïŒã |
get_bulk_vector_data_by_range | å ¬éæ¥ã®ç¯å²ã§ãã£ã«ã¿ãªã³ã°ããè€æ°ã®ãã¯ãã«ãååŸããŸãã |
è€åããŒã«ãšããŒã¿ããŒã¹ããŒã« (ããŒã«ã«ïŒstdio ã¢ãŒãã®ã¿)
ãããã®ããŒã«ã¯ããã¹ãåã® Render ãµãŒããŒã§ã¯å©çšã§ããŸãããSQLite ã¯ããã»ã¹ããšã«ç¬ç«ããŠããããŠãŒã¶ãŒéã§å ±æãããªãããã§ãã
| ããŒã« | 説æ |
|---|---|
fetch_sdmx_to_database | SDMX ã®èŠ³æž¬å€ïŒproductId + keyïŒã芳枬ããŒã¿ã¹ãã¢ã«ååŸããŸããè¡æ°ã®äžéã¯ãªããè¡ãã³ã³ããã¹ãã«å
¥ããŸãããtable_name ã¯ãã¥ãŒã«ãªããŸãã |
fetch_vectors_to_database | åç
§æéã®ç¯å²ãæå®ããŠãåãããŒã¿ã¹ãã¢ã«ãã¯ãã«ãååŸããŸããtable_name ã¯ãã¥ãŒã«ãªããŸãã |
store_cube_metadata | ãã¥ãŒãã®ã¡ã¿ããŒã¿å šäœã SQLite ã«ååŸããŸããSQL ã䜿ã£ãŠãã¹ãŠã®ã¡ã³ããŒãš vectorId ãåç §ã§ããŸãã |
query_database | ããŒã«ã«ã® SQLite ããŒã¿ããŒã¹ã«å¯Ÿããèªã¿åãå°çšã® SQL ã¯ãšãªã§ãã |
create_table_from_data / insert_data | ç¬èªããŒã¿ã®ããŒãã«ãäœæããŸãã¯æ¢åã®ããŒãã«ã«è¿œå ããŸãã |
list_tables / get_table_schema / drop_table | ããŒã¿ããŒã¹ã®ãŠãŒãã£ãªãã£ã§ãïŒããŒãã«ãšãã¥ãŒã«å¯Ÿå¿ãlist_tables ã¯ããŒã¿ã¹ãã¢ã®ãµã€ãºãå ±åããŸãïŒã |
芳枬ããŒã¿ã¹ãã¢ã ã©ã¡ãã®ååŸããŒã«ããå ±æããã2ã€ã®ããŒãã«ã«å¯ŸããŠã¢ãããµãŒããè¡ããããåŒã³åºãããšã«æ°ããããŒãã«ãžã³ããŒããã®ã§ã¯ãªããããŒã¿ãèç©ãããŸãã
| ããŒãã« | 1è¡ããã | äž»ãªå |
|---|---|---|
_statcan_series | ç³»å | series_idïŒ<productId>:<SDMX key>ãäŸïŒ18100004:2.2ïŒãproduct_idãvector_idãdims_jsonïŒã©ãã«ïŒãuom |
_statcan_observations | ç³»å à æé | series_idãref_dateïŒæéã®éå§æ¥ïŒãperiodïŒ2026ã2026-Q2ã2026-08ïŒãvalueãstatusãsourceãfetched_atãrelease_time |
- åååŸæã«ã¯å€ããã®å Žã§æŽæ°ãããŸããåååŸåŠçã§ã¯ã芳枬å€ãäœä»¶
newãrevisedãunchangedã ã£ãããå ±åãããŸãã - åãç³»åã® SDMX ãš WDS ã®ååŸçµæã¯åãè¡ãå ±æããŸãïŒWDS ã®åº§æšã¯åã SDMX ããŒã«å¯Ÿå¿ããŸãïŒã
table_nameã¯ããã®åŒã³åºãã§ååŸããç³»åãšæéã察象ãšãããã¥ãŒã§ã以åãšåãåïŒæ¬¡å ã©ãã«ãperiodãvalueãVECTOR_IDãUOMã...ïŒãæã¡ãŸãã- ããŒãã«ããŸããã åæã«ã¹ããŒãã®èª¿æ»ã¯äžèŠã§ãã
-- Seasonal component: CPI not seasonally adjusted (18100004) minus seasonally adjusted (18100006)
SELECT nsa.period, ROUND(nsa.value - sa.value, 2) AS seasonal
FROM _statcan_observations nsa JOIN _statcan_observations sa USING (ref_date)
WHERE nsa.series_id = '18100004:2.2' AND sa.series_id = '18100006:1.1'
ORDER BY ref_date DESC;
äžè¬çãªã¯ãŒã¯ãããŒ
Claude.ai ãŠã§ãçïŒãã¹ãåãµãŒããŒïŒïŒ
1. search_cubes_by_title("unemployment rate")
â productId e.g. 14100287
2. get_sdmx_structure(productId=14100287)
â dimension positions + sample codes
3. get_sdmx_key_for_dimension(productId=14100287, dimension_position=3)
â or_key for large dimensions
4. get_sdmx_data(productId=14100287, key=".2.1", lastNObservations=24)
â returns download_csv URL
5. Python script: validate URL domain â write to ./statcan_14100287.csv â analyze â print summary
Claude CodeïŒbash ãµã³ãããã¯ã¹ïŒïŒ
statcan search "unemployment rate"
statcan metadata 14100287
statcan download 14-10-0287-01 --key "1.1.1" --last 24 --output ./lfs.csv # run `statcan metadata <pid>` first to find real dimension IDs
awk -F',' 'NR>1 && $1=="Canada"' ./lfs.csv | sort -t',' -rn -k5 | head -10
ãããžã§ã¯ãæ§æ
src/
âââ api/
â âââ cube/
â â âââ discovery.py # search_cubes_by_title, get_all_cubes_list
â â âââ metadata.py # get_cube_metadata
â â âââ series.py # get_series_info, change detection
â âââ vector/
â â âââ vector_tools.py # vector series, bulk range fetch
â âââ sdmx/
â â âââ sdmx_tools.py # get_sdmx_structure, get_sdmx_data, query_sdmx, get_sdmx_key_for_dimension
â âââ composite_tools.py # fetch_sdmx_to_database, fetch_vectors_to_database, store_cube_metadata (stdio only)
â âââ metadata_tools.py # get_code_sets
âââ cli/
â âââ main.py # statcan CLI entry point (Typer app)
â âââ output.py # write_output, format helpers
â âââ commands/
â âââ search.py # statcan search
â âââ metadata.py # statcan metadata
â âââ download.py # statcan download
â âââ vector.py # statcan vector
â âââ codeset.py # statcan codeset
âââ db/ # SQLite: observation store (store.py), per-request SQL for query_sdmx (ephemeral.py), schema, queries
âââ models/ # Pydantic input models
âââ util/
â âââ registry.py # ToolRegistry â @decorator â MCP Tool schema
â âââ truncation.py # Response truncation + pagination guidance
â âââ sdmx_xml.py # SDMX-ML (structure-specific XML) â labelled tabular rows
â âââ cache.py # 1-hour TTL cache for cube list
âââ config.py # BASE_URL, SDMX_BASE_URL, RENDER_BASE_URL, TRANSPORT, PORT
âââ server.py # create_server(), MCP Prompts, resources, HTTP transport, CLI
æ¢ç¥ã®åé¡
| åé¡ | ç¶æ | åé¿ç |
|---|---|---|
| Claude Desktop ã§ãUnable to open database fileããšè¡šç€ºããã | 察å¿äž | èšå®ã« --db-path /Users/<you>/.statcan-mcp/statcan_data.db ãæå®ããŸã |
| ä¿¡é Œã¹ãã¢ã«åé¡ãããå Žåã® SSL æ€èšŒ | èšå®å¯èœ | æ€èšŒã¯ããã©ã«ãã§æå¹ã§ããã·ã¹ãã ã StatCan ã®èšŒææžãæ€èšŒã§ããªãå Žåã«éããSTATCAN_VERIFY_SSL=false ãèšå®ããŸã |
lastNObservations ãš startPeriod/endPeriod ã®äœµçšã§ 406 ãçºçãã | 察å¿äž | ã©ã¡ããäžæ¹ã䜿çšããŠãã ãã |
ã¯ã€ã«ãã«ãŒãïŒOR è¡ãæ¬ èœãŸãã¯èª€ã£ãã©ãã«ã«ãªããVECTOR_ID/UOM ã誀ã£ãŠãã | v0.12.0 ã§ä¿®æ£æžã¿ | StatCan ã® SDMX-JSON ã€ã³ããã¯ã¹ã®ãšã³ã³ãŒãã£ã³ã°ãåå ã§ãããããŒã¿ã¯çŸåšãæ§é åºæã® XML ãšããŠèªã¿èŸŒãŸããŸãïŒ#90ïŒ |
| ã³ã³ããã¹ãã®ãªãŒããŒãããŒã«ãã£ãŠããŒã¿ãæé ãããå¯èœæ§ããã | è»œæžæžã¿ | çã®è¡ããŒã¿ãã³ã³ããã¹ãã«å
¥ããªããããquery_sdmxïŒãã¹ãåïŒãŸã㯠fetch_sdmx_to_databaseïŒããŒã«ã«ïŒã䜿çšããŠãã ãããget_sdmx_data ã¯ã€ã³ã©ã€ã³ã®è¡æ°ã500ä»¶ã«å¶éããŸã |
è²¢ç®è
ã³ãŒããä¿®æ£ããã°å ±åã§è²¢ç®ããŠãã ãã£ãçããŸã«æè¬ããŸãã
- @Aryan-JhaveriïŒäœæè ããã³ã¡ã³ãããŒ
- @dannyward630ïŒ
get_changed_series_listã StatCan ã®æ¥ä»ãªããšã³ããã€ã³ãã䜿ãããã«ä¿®æ£ïŒ#130ïŒ
ååãããæ¹ã¯ãCONTRIBUTING.md ãã芧ãã ããã
ã³ã¡ã³ã
MCP ã¯åããŠã§ããïŒ
ãããã³ã«ã®æŠèŠããæåã®ãµãŒããŒã®å°å ¥ãŸã§ãããããçåã«ãŸãšããŠçããŸãã
AI ã¢ããªã±ãŒã·ã§ã³ãå€éšã®ããŒã«ãããŒã¿ãœãŒã¹ã«çµ±äžçãªæ¹æ³ã§æ¥ç¶ããããã®ãªãŒãã³ãªãããã³ã«ã§ããã¯ã©ã€ã¢ã³ãã¯ã¢ãã«ãšã®å¯Ÿè©±ãæ ããMCP ãµãŒããŒã¯ããŒã«ã»ãªãœãŒã¹ã»ããã³ãããã³ãã¬ãŒããæäŸããŸããæšæºã¡ãã»ãŒãžã§ããåãããããã1 ã€ã®ãµãŒããŒãè€æ°ã®ã¯ã©ã€ã¢ã³ãã§åå©çšã§ããŸãã
