MapleStatsMCP

Un MCP pour les gouverner tous.

MapleStats est un seul serveur MCP pour les données canadiennes accessibles au public. Le MCP (Model Context Protocol) est la norme ouverte qu'utilisent les agents IA pour accéder à des outils et à des données externes. Connectez MapleStats à votre agent IA pour obtenir des statistiques et des rapports précis et bien sourcés, tirés de 86 sources, dont Statistique Canada, la Banque du Canada et la SCHL. Ne vous souciez plus de trouver des données canadiennes : concentrez-vous sur ce qui compte vraiment pour vous.

Une seule connexion

Le MCP est la façon standard de brancher des données sur un agent IA. MapleStats réunit les organismes et portails canadiens derrière une seule connexion, en français ou en anglais, avec la source de chaque chiffre.

Des scripts à relancer

Tout appel de données peut revenir sous forme de script R, Python, Stata ou Julia qui va chercher les mêmes chiffres à la source : l'analyse tourne sans l'agent.

Le plus simple : demandez à votre agent Une seule requête installe MapleStats et le connecte. L'agent lit les étapes d'installation dans le dépôt et s'occupe du reste.

Installe le serveur MCP MapleStats et connecte-le à cet agent. Suis les étapes d'installation de https://github.com/dsanchezp18/maplestats-mcp
  1. Copiez la requête.
  2. Collez-la dans Claude Code, Codex, Cursor ou tout agent qui peut exécuter des commandes sur votre ordinateur.
  3. Redémarrez l'agent quand il vous le dit, puis demandez des données.

Version 0.1.0, bêta. S'exécute sur votre machine par stdio, sans compte ni clé d'API.

3

MCP pour les statisticiens, gardiens des poids et des marges,

7

pour les démographes, qui comptent ceux qui viennent s'établir,

9

pour les analystes, condamnés à expliquer le taux…

Bon, peut-être pas tout à fait.

Trop d'endroits où chercher, trop d'interfaces à apprendre.

Le MCP a facilité la connexion des agents IA aux données, et l'on s'est mis à construire des serveurs étroits pour des pans étroits de l'écosystème canadien : un pour Statistique Canada, un autre pour la Banque du Canada, d'autres pour les portails de données ouvertes. Chacun peut être utile. Ensemble, ils recréent un vieux problème canadien : trop de choix avant de poser une question pourtant simple. MapleStats prend le chemin inverse : un seul MCP pour les données ouvertes canadiennes.

Centraliser l'interface, pas les données.

Le serveur ne garde aucune copie. Il interroge chaque source directement ; chaque chiffre vient de son éditeur.

Une couche de découverte, de nombreux adaptateurs.

Chaque organisme garde son adaptateur. L'agent ne voit qu'une recherche commune à tous.

Partir de la question, pas du portail.

L'agent n'a pas à savoir si la réponse est un tableau de StatCan, une série Valet, un jeu de données de la SCHL ou une ressource CKAN.

Études de cas

Que pouvez-vous en faire

Huit questions de huit métiers différents, chacune résolue par des appels aux outils de MapleStats. En voici une : celle d'un macroéconomiste qui lit la courbe des taux.

Macroéconomistes

Quand la courbe des taux s'inverse

L'écart entre les rendements des obligations du gouvernement du Canada à 10 ans et à 2 ans, chaque jour ouvrable depuis 2001. Quand il passe sous zéro, les marchés s'attendent à une baisse des taux, le plus souvent parce qu'ils prévoient un ralentissement. La courbe s'est inversée en 2007, 2019 à 2020 et 2022 à 2024.

La courbe des taux : rendement des obligations de référence du gouvernement du Canada à 10 ans moins celui à 2 ans, moyenne mensuelle des valeurs quotidiennes, mois inversés ombrés-200 pb-100 pb0 pb100 pb200 pb300 pbInversée20052010201520202025janvier 2001 : 41 pbfévrier 2001 : 50 pbmars 2001 : 63 pbavril 2001 : 82 pbmai 2001 : 98 pbjuin 2001 : 92 pbjuillet 2001 : 98 pbaoût 2001 : 107 pbseptembre 2001 : 163 pboctobre 2001 : 187 pbnovembre 2001 : 207 pbdécembre 2001 : 213 pbjanvier 2002 : 225 pbfévrier 2002 : 207 pbmars 2002 : 161 pbavril 2002 : 139 pbmai 2002 : 144 pbjuin 2002 : 141 pbjuillet 2002 : 171 pbaoût 2002 : 183 pbseptembre 2002 : 150 pboctobre 2002 : 165 pbnovembre 2002 : 176 pbdécembre 2002 : 170 pbjanvier 2003 : 166 pbfévrier 2003 : 153 pbmars 2003 : 132 pbavril 2003 : 131 pbmai 2003 : 124 pbjuin 2003 : 131 pbjuillet 2003 : 170 pbaoût 2003 : 188 pbseptembre 2003 : 172 pboctobre 2003 : 169 pbnovembre 2003 : 161 pbdécembre 2003 : 165 pbjanvier 2004 : 183 pbfévrier 2004 : 199 pbmars 2004 : 195 pbavril 2004 : 188 pbmai 2004 : 181 pbjuin 2004 : 163 pbjuillet 2004 : 160 pbaoût 2004 : 165 pbseptembre 2004 : 147 pboctobre 2004 : 133 pbnovembre 2004 : 126 pbdécembre 2004 : 138 pbjanvier 2005 : 131 pbfévrier 2005 : 129 pbmars 2005 : 122 pbavril 2005 : 109 pbmai 2005 : 103 pbjuin 2005 : 98 pbjuillet 2005 : 88 pbaoût 2005 : 81 pbseptembre 2005 : 74 pboctobre 2005 : 59 pbnovembre 2005 : 40 pbdécembre 2005 : 23 pbjanvier 2006 : 24 pbfévrier 2006 : 22 pbmars 2006 : 26 pbavril 2006 : 32 pbmai 2006 : 29 pbjuin 2006 : 17 pbjuillet 2006 : 21 pbaoût 2006 : 16 pbseptembre 2006 : 12 pboctobre 2006 : 9 pbnovembre 2006 : 6 pbdécembre 2006 : 6 pbjanvier 2007 : 7 pbfévrier 2007 : 4 pbmars 2007 : 10 pbavril 2007 : 7 pbmai 2007 : -3 pbjuin 2007 : -5 pbjuillet 2007 : -5 pbaoût 2007 : 8 pbseptembre 2007 : 15 pboctobre 2007 : 16 pbnovembre 2007 : 32 pbdécembre 2007 : 27 pbjanvier 2008 : 54 pbfévrier 2008 : 77 pbmars 2008 : 93 pbavril 2008 : 84 pbmai 2008 : 75 pbjuin 2008 : 58 pbjuillet 2008 : 62 pbaoût 2008 : 80 pbseptembre 2008 : 82 pboctobre 2008 : 145 pbnovembre 2008 : 171 pbdécembre 2008 : 157 pbjanvier 2009 : 167 pbfévrier 2009 : 175 pbmars 2009 : 186 pbavril 2009 : 189 pbmai 2009 : 208 pbjuin 2009 : 217 pbjuillet 2009 : 218 pbaoût 2009 : 213 pbseptembre 2009 : 211 pboctobre 2009 : 196 pbnovembre 2009 : 209 pbdécembre 2009 : 213 pbjanvier 2010 : 221 pbfévrier 2010 : 210 pbmars 2010 : 192 pbavril 2010 : 177 pbmai 2010 : 165 pbjuin 2010 : 163 pbjuillet 2010 : 162 pbaoût 2010 : 160 pbseptembre 2010 : 147 pboctobre 2010 : 139 pbnovembre 2010 : 145 pbdécembre 2010 : 154 pbjanvier 2011 : 153 pbfévrier 2011 : 158 pbmars 2011 : 152 pbavril 2011 : 152 pbmai 2011 : 151 pbjuin 2011 : 152 pbjuillet 2011 : 145 pbaoût 2011 : 146 pbseptembre 2011 : 128 pboctobre 2011 : 129 pbnovembre 2011 : 119 pbdécembre 2011 : 110 pbjanvier 2012 : 100 pbfévrier 2012 : 96 pbmars 2012 : 91 pbavril 2012 : 77 pbmai 2012 : 71 pbjuin 2012 : 74 pbjuillet 2012 : 66 pbaoût 2012 : 67 pbseptembre 2012 : 69 pboctobre 2012 : 71 pbnovembre 2012 : 65 pbdécembre 2012 : 67 pbjanvier 2013 : 76 pbfévrier 2013 : 86 pbmars 2013 : 88 pbavril 2013 : 79 pbmai 2013 : 89 pbjuin 2013 : 110 pbjuillet 2013 : 129 pbaoût 2013 : 143 pbseptembre 2013 : 145 pboctobre 2013 : 136 pbnovembre 2013 : 145 pbdécembre 2013 : 157 pbjanvier 2014 : 150 pbfévrier 2014 : 142 pbmars 2014 : 141 pbavril 2014 : 138 pbmai 2014 : 126 pbjuin 2014 : 121 pbjuillet 2014 : 110 pbaoût 2014 : 98 pbseptembre 2014 : 104 pboctobre 2014 : 99 pbnovembre 2014 : 100 pbdécembre 2014 : 84 pbjanvier 2015 : 77 pbfévrier 2015 : 94 pbmars 2015 : 89 pbavril 2015 : 83 pbmai 2015 : 107 pbjuin 2015 : 117 pbjuillet 2015 : 113 pbaoût 2015 : 99 pbseptembre 2015 : 100 pboctobre 2015 : 93 pbnovembre 2015 : 101 pbdécembre 2015 : 92 pbjanvier 2016 : 87 pbfévrier 2016 : 70 pbmars 2016 : 72 pbavril 2016 : 73 pbmai 2016 : 75 pbjuin 2016 : 64 pbjuillet 2016 : 51 pbaoût 2016 : 49 pbseptembre 2016 : 53 pboctobre 2016 : 60 pbnovembre 2016 : 81 pbdécembre 2016 : 96 pbjanvier 2017 : 95 pbfévrier 2017 : 94 pbmars 2017 : 93 pbavril 2017 : 79 pbmai 2017 : 82 pbjuin 2017 : 64 pbjuillet 2017 : 69 pbaoût 2017 : 64 pbseptembre 2017 : 52 pboctobre 2017 : 55 pbnovembre 2017 : 48 pbdécembre 2017 : 34 pbjanvier 2018 : 42 pbfévrier 2018 : 51 pbmars 2018 : 39 pbavril 2018 : 39 pbmai 2018 : 41 pbjuin 2018 : 34 pbjuillet 2018 : 22 pbaoût 2018 : 19 pbseptembre 2018 : 21 pboctobre 2018 : 20 pbnovembre 2018 : 14 pbdécembre 2018 : 8 pbjanvier 2019 : 8 pbfévrier 2019 : 12 pbmars 2019 : 10 pbavril 2019 : 14 pbmai 2019 : 8 pbjuin 2019 : 5 pbjuillet 2019 : -0 pbaoût 2019 : -16 pbseptembre 2019 : -18 pboctobre 2019 : -13 pbnovembre 2019 : -7 pbdécembre 2019 : -6 pbjanvier 2020 : -9 pbfévrier 2020 : -12 pbmars 2020 : 20 pbavril 2020 : 29 pbmai 2020 : 26 pbjuin 2020 : 26 pbjuillet 2020 : 24 pbaoût 2020 : 28 pbseptembre 2020 : 30 pboctobre 2020 : 36 pbnovembre 2020 : 42 pbdécembre 2020 : 49 pbjanvier 2021 : 64 pbfévrier 2021 : 89 pbmars 2021 : 124 pbavril 2021 : 124 pbmai 2021 : 121 pbjuin 2021 : 105 pbjuillet 2021 : 79 pbaoût 2021 : 74 pbseptembre 2021 : 82 pboctobre 2021 : 82 pbnovembre 2021 : 69 pbdécembre 2021 : 47 pbjanvier 2022 : 58 pbfévrier 2022 : 44 pbmars 2022 : 29 pbavril 2022 : 24 pbmai 2022 : 27 pbjuin 2022 : 16 pbjuillet 2022 : -13 pbaoût 2022 : -50 pbseptembre 2022 : -58 pboctobre 2022 : -63 pbnovembre 2022 : -79 pbdécembre 2022 : -87 pbjanvier 2023 : -80 pbfévrier 2023 : -88 pbmars 2023 : -83 pbavril 2023 : -81 pbmai 2023 : -88 pbjuin 2023 : -119 pbjuillet 2023 : -123 pbaoût 2023 : -105 pbseptembre 2023 : -97 pboctobre 2023 : -72 pbnovembre 2023 : -71 pbdécembre 2023 : -78 pbjanvier 2024 : -66 pbfévrier 2024 : -68 pbmars 2024 : -69 pbavril 2024 : -56 pbmai 2024 : -58 pbjuin 2024 : -55 pbjuillet 2024 : -37 pbaoût 2024 : -21 pbseptembre 2024 : -4 pboctobre 2024 : 11 pbnovembre 2024 : 10 pbdécembre 2024 : 17 pbjanvier 2025 : 36 pbfévrier 2025 : 37 pbmars 2025 : 47 pbavril 2025 : 58 pbmai 2025 : 63 pbjuin 2025 : 66 pbjuillet 2025 : 72 pbaoût 2025 : 73 pbseptembre 2025 : 72 pboctobre 2025 : 71 pbnovembre 2025 : 73 pbdécembre 2025 : 81 pbjanvier 2026 : 84 pbfévrier 2026 : 80 pbmars 2026 : 68 pbavril 2026 : 65 pbmai 2026 : 61 pbjuin 2026 : 63 pbjuillet 2026 : 71 pbaoût 2026 : 72 pbseptembre 2026 : 62 pb62 pbLa courbe des taux : rendement des obligations de référence du gouvernement du Canada à 10 ans moins celui à 2 ans, moyenne mensuelle des valeurs quotidiennes, mois inversés ombrés-200 pb-100 pb0 pb100 pb200 pb300 pbInversée20052010201520202025janvier 2001 : 41 pbfévrier 2001 : 50 pbmars 2001 : 63 pbavril 2001 : 82 pbmai 2001 : 98 pbjuin 2001 : 92 pbjuillet 2001 : 98 pbaoût 2001 : 107 pbseptembre 2001 : 163 pboctobre 2001 : 187 pbnovembre 2001 : 207 pbdécembre 2001 : 213 pbjanvier 2002 : 225 pbfévrier 2002 : 207 pbmars 2002 : 161 pbavril 2002 : 139 pbmai 2002 : 144 pbjuin 2002 : 141 pbjuillet 2002 : 171 pbaoût 2002 : 183 pbseptembre 2002 : 150 pboctobre 2002 : 165 pbnovembre 2002 : 176 pbdécembre 2002 : 170 pbjanvier 2003 : 166 pbfévrier 2003 : 153 pbmars 2003 : 132 pbavril 2003 : 131 pbmai 2003 : 124 pbjuin 2003 : 131 pbjuillet 2003 : 170 pbaoût 2003 : 188 pbseptembre 2003 : 172 pboctobre 2003 : 169 pbnovembre 2003 : 161 pbdécembre 2003 : 165 pbjanvier 2004 : 183 pbfévrier 2004 : 199 pbmars 2004 : 195 pbavril 2004 : 188 pbmai 2004 : 181 pbjuin 2004 : 163 pbjuillet 2004 : 160 pbaoût 2004 : 165 pbseptembre 2004 : 147 pboctobre 2004 : 133 pbnovembre 2004 : 126 pbdécembre 2004 : 138 pbjanvier 2005 : 131 pbfévrier 2005 : 129 pbmars 2005 : 122 pbavril 2005 : 109 pbmai 2005 : 103 pbjuin 2005 : 98 pbjuillet 2005 : 88 pbaoût 2005 : 81 pbseptembre 2005 : 74 pboctobre 2005 : 59 pbnovembre 2005 : 40 pbdécembre 2005 : 23 pbjanvier 2006 : 24 pbfévrier 2006 : 22 pbmars 2006 : 26 pbavril 2006 : 32 pbmai 2006 : 29 pbjuin 2006 : 17 pbjuillet 2006 : 21 pbaoût 2006 : 16 pbseptembre 2006 : 12 pboctobre 2006 : 9 pbnovembre 2006 : 6 pbdécembre 2006 : 6 pbjanvier 2007 : 7 pbfévrier 2007 : 4 pbmars 2007 : 10 pbavril 2007 : 7 pbmai 2007 : -3 pbjuin 2007 : -5 pbjuillet 2007 : -5 pbaoût 2007 : 8 pbseptembre 2007 : 15 pboctobre 2007 : 16 pbnovembre 2007 : 32 pbdécembre 2007 : 27 pbjanvier 2008 : 54 pbfévrier 2008 : 77 pbmars 2008 : 93 pbavril 2008 : 84 pbmai 2008 : 75 pbjuin 2008 : 58 pbjuillet 2008 : 62 pbaoût 2008 : 80 pbseptembre 2008 : 82 pboctobre 2008 : 145 pbnovembre 2008 : 171 pbdécembre 2008 : 157 pbjanvier 2009 : 167 pbfévrier 2009 : 175 pbmars 2009 : 186 pbavril 2009 : 189 pbmai 2009 : 208 pbjuin 2009 : 217 pbjuillet 2009 : 218 pbaoût 2009 : 213 pbseptembre 2009 : 211 pboctobre 2009 : 196 pbnovembre 2009 : 209 pbdécembre 2009 : 213 pbjanvier 2010 : 221 pbfévrier 2010 : 210 pbmars 2010 : 192 pbavril 2010 : 177 pbmai 2010 : 165 pbjuin 2010 : 163 pbjuillet 2010 : 162 pbaoût 2010 : 160 pbseptembre 2010 : 147 pboctobre 2010 : 139 pbnovembre 2010 : 145 pbdécembre 2010 : 154 pbjanvier 2011 : 153 pbfévrier 2011 : 158 pbmars 2011 : 152 pbavril 2011 : 152 pbmai 2011 : 151 pbjuin 2011 : 152 pbjuillet 2011 : 145 pbaoût 2011 : 146 pbseptembre 2011 : 128 pboctobre 2011 : 129 pbnovembre 2011 : 119 pbdécembre 2011 : 110 pbjanvier 2012 : 100 pbfévrier 2012 : 96 pbmars 2012 : 91 pbavril 2012 : 77 pbmai 2012 : 71 pbjuin 2012 : 74 pbjuillet 2012 : 66 pbaoût 2012 : 67 pbseptembre 2012 : 69 pboctobre 2012 : 71 pbnovembre 2012 : 65 pbdécembre 2012 : 67 pbjanvier 2013 : 76 pbfévrier 2013 : 86 pbmars 2013 : 88 pbavril 2013 : 79 pbmai 2013 : 89 pbjuin 2013 : 110 pbjuillet 2013 : 129 pbaoût 2013 : 143 pbseptembre 2013 : 145 pboctobre 2013 : 136 pbnovembre 2013 : 145 pbdécembre 2013 : 157 pbjanvier 2014 : 150 pbfévrier 2014 : 142 pbmars 2014 : 141 pbavril 2014 : 138 pbmai 2014 : 126 pbjuin 2014 : 121 pbjuillet 2014 : 110 pbaoût 2014 : 98 pbseptembre 2014 : 104 pboctobre 2014 : 99 pbnovembre 2014 : 100 pbdécembre 2014 : 84 pbjanvier 2015 : 77 pbfévrier 2015 : 94 pbmars 2015 : 89 pbavril 2015 : 83 pbmai 2015 : 107 pbjuin 2015 : 117 pbjuillet 2015 : 113 pbaoût 2015 : 99 pbseptembre 2015 : 100 pboctobre 2015 : 93 pbnovembre 2015 : 101 pbdécembre 2015 : 92 pbjanvier 2016 : 87 pbfévrier 2016 : 70 pbmars 2016 : 72 pbavril 2016 : 73 pbmai 2016 : 75 pbjuin 2016 : 64 pbjuillet 2016 : 51 pbaoût 2016 : 49 pbseptembre 2016 : 53 pboctobre 2016 : 60 pbnovembre 2016 : 81 pbdécembre 2016 : 96 pbjanvier 2017 : 95 pbfévrier 2017 : 94 pbmars 2017 : 93 pbavril 2017 : 79 pbmai 2017 : 82 pbjuin 2017 : 64 pbjuillet 2017 : 69 pbaoût 2017 : 64 pbseptembre 2017 : 52 pboctobre 2017 : 55 pbnovembre 2017 : 48 pbdécembre 2017 : 34 pbjanvier 2018 : 42 pbfévrier 2018 : 51 pbmars 2018 : 39 pbavril 2018 : 39 pbmai 2018 : 41 pbjuin 2018 : 34 pbjuillet 2018 : 22 pbaoût 2018 : 19 pbseptembre 2018 : 21 pboctobre 2018 : 20 pbnovembre 2018 : 14 pbdécembre 2018 : 8 pbjanvier 2019 : 8 pbfévrier 2019 : 12 pbmars 2019 : 10 pbavril 2019 : 14 pbmai 2019 : 8 pbjuin 2019 : 5 pbjuillet 2019 : -0 pbaoût 2019 : -16 pbseptembre 2019 : -18 pboctobre 2019 : -13 pbnovembre 2019 : -7 pbdécembre 2019 : -6 pbjanvier 2020 : -9 pbfévrier 2020 : -12 pbmars 2020 : 20 pbavril 2020 : 29 pbmai 2020 : 26 pbjuin 2020 : 26 pbjuillet 2020 : 24 pbaoût 2020 : 28 pbseptembre 2020 : 30 pboctobre 2020 : 36 pbnovembre 2020 : 42 pbdécembre 2020 : 49 pbjanvier 2021 : 64 pbfévrier 2021 : 89 pbmars 2021 : 124 pbavril 2021 : 124 pbmai 2021 : 121 pbjuin 2021 : 105 pbjuillet 2021 : 79 pbaoût 2021 : 74 pbseptembre 2021 : 82 pboctobre 2021 : 82 pbnovembre 2021 : 69 pbdécembre 2021 : 47 pbjanvier 2022 : 58 pbfévrier 2022 : 44 pbmars 2022 : 29 pbavril 2022 : 24 pbmai 2022 : 27 pbjuin 2022 : 16 pbjuillet 2022 : -13 pbaoût 2022 : -50 pbseptembre 2022 : -58 pboctobre 2022 : -63 pbnovembre 2022 : -79 pbdécembre 2022 : -87 pbjanvier 2023 : -80 pbfévrier 2023 : -88 pbmars 2023 : -83 pbavril 2023 : -81 pbmai 2023 : -88 pbjuin 2023 : -119 pbjuillet 2023 : -123 pbaoût 2023 : -105 pbseptembre 2023 : -97 pboctobre 2023 : -72 pbnovembre 2023 : -71 pbdécembre 2023 : -78 pbjanvier 2024 : -66 pbfévrier 2024 : -68 pbmars 2024 : -69 pbavril 2024 : -56 pbmai 2024 : -58 pbjuin 2024 : -55 pbjuillet 2024 : -37 pbaoût 2024 : -21 pbseptembre 2024 : -4 pboctobre 2024 : 11 pbnovembre 2024 : 10 pbdécembre 2024 : 17 pbjanvier 2025 : 36 pbfévrier 2025 : 37 pbmars 2025 : 47 pbavril 2025 : 58 pbmai 2025 : 63 pbjuin 2025 : 66 pbjuillet 2025 : 72 pbaoût 2025 : 73 pbseptembre 2025 : 72 pboctobre 2025 : 71 pbnovembre 2025 : 73 pbdécembre 2025 : 81 pbjanvier 2026 : 84 pbfévrier 2026 : 80 pbmars 2026 : 68 pbavril 2026 : 65 pbmai 2026 : 61 pbjuin 2026 : 63 pbjuillet 2026 : 71 pbaoût 2026 : 72 pbseptembre 2026 : 62 pb62 pb
Voir les données
L'écart de rendement entre 10 ans et 2 ans par année : moyenne, minimum et maximum des moyennes mensuelles de l'année
AnnéeMoyenneMois le plus basMois le plus haut
2001117 pb41 pb213 pb
2002169 pb139 pb225 pb
2003155 pb124 pb188 pb
2004165 pb126 pb199 pb
200588 pb23 pb131 pb
200618 pb6 pb32 pb
20079 pb-5 pb32 pb
200895 pb54 pb171 pb
2009200 pb167 pb218 pb
2010169 pb139 pb221 pb
2011141 pb110 pb158 pb
201276 pb65 pb100 pb
2013115 pb76 pb157 pb
2014118 pb84 pb150 pb
201597 pb77 pb117 pb
201669 pb49 pb96 pb
201769 pb34 pb95 pb
201829 pb8 pb51 pb
2019-0 pb-18 pb14 pb
202024 pb-12 pb49 pb
202188 pb47 pb124 pb
2022-13 pb-87 pb58 pb
2023-91 pb-123 pb-71 pb
2024-33 pb-69 pb17 pb
202563 pb36 pb81 pb
202670 pb61 pb84 pb
Source : https://www.bankofcanada.ca/valet/observations/BD.CDN.2YR.DQ.YLD,BD.CDN.10YR.DQ.YLD/json, interrogée le 27 septembre 2026

Les sept autres

Sources

D'où viennent les données

Les organismes fédéraux répondent à la plupart des questions nationales ; les organismes provinciaux et les catalogues de données ouvertes ajoutent le détail local. Chaque résultat vient directement de son éditeur.

30
sources fédérales et nationales
56
sources provinciales, territoriales et municipales
12/13
provinces et territoires avec des données locales
215
outils derrière une seule connexion

Statistique Canada en détail Chaque tableau, série et fichier de microdonnées qu'un agent peut atteindre, et les difficultés que MapleStats règle pour vous.

Fonctionnement

D'une question à un chiffre sourcé

Un agent connecté voit trois outils : plan_query, search_tools et call_tool. Les 214 autres restent hors de son contexte jusqu'à ce qu'une recherche les trouve. Tous les résultats ci-dessous sont réels. Le serveur a produit le plan, la recherche et les scripts lors de la construction de cette page ; l'appel de données a été enregistré le 27 septembre 2026.

  1. 01

    Planifierplan_query

    Le planificateur lit la question et énumère les organismes à interroger, dans l'ordre, avec les précautions à prendre pour combiner leurs résultats. Les lieux qu'il reconnaît ajoutent leurs portails locaux. Le planificateur rédige pour l'instant son plan en anglais.

    plan_queryExécuté à la construction de la page

    Question

    Comment les loyers et les taux d'intérêt ont-ils évolué à Calgary depuis 2020 ?

    Plan

    Housing: starts, rents, prices, mortgages

    1. cmhc_list_categoriesCMHC starts, completions, rents and vacancy by centre
    2. cmhc_get_table_datapull the CMHC table for the place and period
    3. wds_search_cubesStatCan New Housing Price Index, building permits
    4. boc_search_seriesBank of Canada mortgage and policy rates
    5. statcan_census_profile_get_datacensus shelter cost and tenure by area

    Précaution CMHC reports by census metropolitan area and centre; StatCan price indexes are by CMA too, but the two define some areas differently, so name the geography each figure uses.

    Interest rates, exchange rates and markets

    1. boc_search_seriesfind the Valet series (e.g. FXUSDCAD, V39079)
    2. boc_get_observationspull the series for the period

    Calgary (ville)

    1. socrata_search_datasetssearch with portal='calgary'
  2. 02

    Trouversearch_tools

    La recherche classe le catalogue selon une requête en langage courant et renvoie les 5 premiers outils. Le français fonctionne, car chaque outil porte des mots-clés français, même si sa description est en anglais. Le panneau exécute l'index du serveur dans votre navigateur : essayez votre propre requête.

    search_toolsS'exécute dans votre navigateur

    Essayez

    1. 1boc_search_seriesBanque du CanadaSearch Bank of Canada Valet's ~16,000 statistical series by keyword.
    2. 2boc_get_observationsBanque du CanadaGet observations for one or more Bank of Canada Valet series.
    3. 3boc_search_groupsBanque du CanadaSearch Bank of Canada Valet's series groups by keyword.
    4. 4boc_get_groupBanque du CanadaGet a Bank of Canada Valet group's description and member series.
    5. 5boc_get_group_observationsBanque du CanadaGet observations for every series in a Bank of Canada Valet group.

    Les 5 premiers des 214 outils indexés, classés par le même index BM25 que search_tools.

  3. 03

    Récupérercall_tool

    L'agent appelle l'outil par son nom. Le résultat est un objet typé, et son bloc de provenance, mis en évidence ici, donne l'URL exacte de la source et l'heure de la requête.

    call_toolEnregistré le 27 septembre 2026

    Requête

    {"name": "boc_get_observations", "arguments": {"series_names": ["V39079"], "recent": 3}}

    Résultat

    Target for the overnight rate (business daily) V39079
    DateValeur
    24 septembre 20262,25
    23 septembre 20262,25
    22 septembre 20262,25

    Provenance

    Consultée le
    27 septembre 2026, 17 h 00 UTC
    Type de résultat
    boc.ObservationsResult
    Afficher la réponse complète en JSON
    {
      "series": {
        "V39079": {"name": "V39079", "label": "Target for the overnight rate (business daily)", "description": "Also called the policy interest rate, the average rate that the Bank of Canada wants to see in the market for overnight money market financing. (V39079)"}
      },
      "observations": [
        {"ref_date": "2026-09-24", "values": {"V39079": 2.25}},
        {"ref_date": "2026-09-23", "values": {"V39079": 2.25}},
        {"ref_date": "2026-09-22", "values": {"V39079": 2.25}}
      ],
      "provenance": {
        "source": "boc",
        "url": "https://www.bankofcanada.ca/valet/observations/V39079/json",
        "queried_at": "2026-09-27T17:00:48.227537Z",
        "as_of": null,
        "freshness": null,
        "coverage": null,
        "limits": null,
        "cached": false,
        "schema_name": "boc.ObservationsResult",
        "reproduce": "For R, Python, Stata and Julia scripts that fetch and clean this data, call reproduce_code with this tool's name and arguments."
      }}
  4. 04

    Reproduirereproduce_code

    Le même appel devient un script R, Python, Stata ou Julia qui télécharge, vérifie et nettoie les données, pour que l'analyse ne dépende pas de l'agent.

    reproduce_codeExécuté à la construction de la page

    Requête

    {"tool_name": "boc_get_observations", "arguments": {"series_names": ["V39079"], "recent": 3}}

    R

    # ============================================================
    # Bank of Canada Valet: V39079
    # Purpose: Fetch the data behind MapleStats MCP's boc_get_observations
    #          (exact: Valet request rebuilt from the tool's arguments)
    # Inputs:  https://www.bankofcanada.ca/valet/observations/V39079/json?recent=3
    # Outputs: data/raw/valet_observations.json; the prepared table as `data`
    # ============================================================
    
    # 0. Setup ----
    
    library(dplyr)
    library(httr2)
    library(janitor)
    library(jsonlite)
    library(lubridate)
    library(readr)
    library(stringr)
    library(tibble)
    library(tidyr)
    
    dir.create("data/raw", recursive = TRUE, showWarnings = FALSE)
    
    # 1. Read inputs ----
    
    response <- request("https://www.bankofcanada.ca/valet/observations/V39079/json?recent=3") |>
      req_perform()
    
    writeLines(resp_body_string(response), "data/raw/valet_observations.json")
    
    payload <- fromJSON("data/raw/valet_observations.json", flatten = TRUE)
    data <- as_tibble(payload[["observations"]])
    
    # 2. Check inputs ----
    
    stopifnot("https://www.bankofcanada.ca/valet/observations/V39079/json?recent=3 returned no rows" = nrow(data) > 0)
    
    # 3. Prepare data ----
    
    data <- data |>
      clean_names()
    
    # Valet nests each series as <series>.v; make one row per date and series.
    
    data <- data |>
      pivot_longer(-d, names_to = "series", values_to = "value") |>
      mutate(
        series = str_remove(series, "_v$") |> str_to_upper(),
        value = as.numeric(value),
        date = ymd(d)
      ) |>
      select(date, series, value)
    
    # Standard cleaning: trimmed text, empty strings as missing, and numbers
    # stored as text converted to numbers.
    
    data <- data |>
      mutate(across(where(is.character), \(x) na_if(str_trim(x), ""))) |>
      type_convert()

    Python

    # ============================================================
    # Bank of Canada Valet: V39079
    # Purpose: Fetch the data behind MapleStats MCP's boc_get_observations
    #          (exact: Valet request rebuilt from the tool's arguments)
    # Inputs:  https://www.bankofcanada.ca/valet/observations/V39079/json?recent=3
    # Outputs: data/raw/valet_observations.json; the prepared table as `data`
    # ============================================================
    
    # %% 0. Setup
    
    import json
    import re
    import unicodedata
    from pathlib import Path
    
    import httpx
    import polars as pl
    
    RAW_DIR = Path("data/raw")
    RAW_DIR.mkdir(parents=True, exist_ok=True)
    raw_path = RAW_DIR / "valet_observations.json"
    
    # %% 1. Read inputs
    
    with httpx.Client(
        http2=True,
        follow_redirects=True,
        timeout=300,
        headers={"User-Agent": "Mozilla/5.0 (compatible; research script)"},
    ) as client:
        response = client.get('https://www.bankofcanada.ca/valet/observations/V39079/json?recent=3')
    response.raise_for_status()
    raw_path.write_bytes(response.content)
    
    payload = json.loads(raw_path.read_text(encoding="utf-8"))
    records = payload['observations']
    data = pl.json_normalize(records, strict=False)
    
    # %% 2. Check inputs
    
    assert data.height > 0, "https://www.bankofcanada.ca/valet/observations/V39079/json?recent=3 returned no rows"
    
    # %% 3. Prepare data
    
    # Valet nests each series as <series>.v; make one row per date and series.
    
    data = data.unpivot(index="d", variable_name="series", value_name="value")
    data = data.with_columns(
        pl.col("d").str.to_date().alias("date"),
        pl.col("series").str.replace(r"\.v$", ""),
        pl.col("value").cast(pl.Float64, strict=False),
    ).select("date", "series", "value")
    
    # Standard cleaning: snake_case names without accents (PÉRIODE -> periode,
    # referenceNumber -> reference_number, as janitor does in R), trimmed text,
    # empty strings as missing. Names that clean alike are numbered as janitor
    # numbers them (Indicator, indicator -> indicator, indicator_2).
    
    clean_names = [
        re.sub(
            r"[^0-9a-z]+",
            "_",
            re.sub(
                r"([a-z0-9])([A-Z])",
                r"\1_\2",
                unicodedata.normalize("NFKD", column).encode("ascii", "ignore").decode(),
            ).lower(),
        ).strip("_")
        for column in data.columns
    ]
    while len(set(clean_names)) < len(clean_names):
        name_counts = {}
        numbered = []
        for name in clean_names:
            name_counts[name] = name_counts.get(name, 0) + 1
            count = name_counts[name]
            numbered.append(name if count == 1 else f"{name}_{count}")
        clean_names = numbered
    data = data.rename(dict(zip(data.columns, clean_names)))
    data = data.with_columns(pl.col(pl.Utf8).str.strip_chars().replace("", None))

    Stata

    * ============================================================
    * Bank of Canada Valet: V39079
    * Purpose: Fetch the data behind MapleStats MCP's boc_get_observations
    *          (exact: Valet request rebuilt from the tool's arguments)
    * Inputs:  https://www.bankofcanada.ca/valet/observations/V39079/json?recent=3
    * Outputs: data/raw/valet_observations.json; the prepared table as `data`
    * ============================================================
    
    version 18
    clear all
    set more off
    
    * 0. Setup
    
    capture mkdir "logs"
    capture log close
    log using "logs/boc_get_observations.log", replace
    capture mkdir "data"
    capture mkdir "data/raw"
    
    * 1. Read inputs
    
    * Stata reads no JSON or HTML and truncates long column names, so its
    * built-in Python (Stata 16+) fetches, filters and writes a CSV. Point
    * Stata at a Python with these packages first: python set exec <path>.
    
    python:
    import json
    from pathlib import Path
    import httpx
    import polars as pl
    RAW_DIR = Path("data/raw")
    RAW_DIR.mkdir(parents=True, exist_ok=True)
    raw_path = RAW_DIR / "valet_observations.json"
    with httpx.Client(http2=True, follow_redirects=True, timeout=300, headers={"User-Agent": "Mozilla/5.0 (compatible; research script)"}) as client: response = client.get('https://www.bankofcanada.ca/valet/observations/V39079/json?recent=3')
    response.raise_for_status()
    raw_path.write_bytes(response.content)
    payload = json.loads(raw_path.read_text(encoding="utf-8"))
    records = payload['observations']
    data = pl.json_normalize(records, strict=False)
    nested = [name for name, dtype in data.schema.items() if dtype.is_nested()]
    data = data.with_columns(pl.col(name).map_elements(lambda value: json.dumps(value.to_list() if isinstance(value, pl.Series) else value, default=str), return_dtype=pl.Utf8) for name in nested)
    data.write_csv(RAW_DIR / "valet_observations_prepared.csv")
    end
    
    import delimited "data/raw/valet_observations_prepared.csv", clear varnames(1) encoding("utf-8")
    
    * 2. Check inputs
    
    assert _N > 0
    
    * 3. Prepare data
    
    * One column per series (<series>_v), one row per date.
    
    generate date = date(d, "YMD")
    format date %td
    drop d
    
    * Standard cleaning: lower-case names, trimmed text, and numbers stored as
    * text converted (destring leaves genuinely non-numeric text alone).
    * rename *, lower stops at a clash (Indicator next to indicator), so names
    * that lower-case alike are numbered as janitor numbers them (indicator,
    * indicator_2), then renamed in one group rename, which allows swaps.
    
    local names
    foreach var of varlist _all {
        local names `names' `=strlower("`var'")'
    }
    local dups : list dups names
    while "`dups'" != "" {
        local numbered
        local before
        foreach name of local names {
            local count 1
            foreach earlier of local before {
                if "`earlier'" == "`name'" local ++count
            }
            local before `before' `name'
            if `count' > 1 {
                local name = substr("`name'", 1, 32 - strlen("_`count'")) + "_`count'"
            }
            local numbered `numbered' `name'
        }
        local names `numbered'
        local dups : list dups names
    }
    local old_names
    local new_names
    local i 0
    foreach var of varlist _all {
        local ++i
        local name : word `i' of `names'
        if "`name'" != "`var'" {
            local old_names `old_names' `var'
            local new_names `new_names' `name'
        }
    }
    if "`old_names'" != "" {
        rename (`old_names') (`new_names')
    }
    quietly ds, has(type string)
    local text_vars `r(varlist)'
    foreach var of local text_vars {
        replace `var' = strtrim(`var')
    }
    destring, replace
    
    log close

    Julia

    # ============================================================
    # Bank of Canada Valet: V39079
    # Purpose: Fetch the data behind MapleStats MCP's boc_get_observations
    #          (exact: Valet request rebuilt from the tool's arguments)
    # Inputs:  https://www.bankofcanada.ca/valet/observations/V39079/json?recent=3
    # Outputs: data/raw/valet_observations.json; the prepared table as `data`
    # ============================================================
    
    # 0. Setup
    
    using DataFrames
    using Downloads
    using JSON3
    using Tables
    using TidierData
    
    mkpath("data/raw")
    
    # 1. Read inputs
    
    Downloads.download("https://www.bankofcanada.ca/valet/observations/V39079/json?recent=3", "data/raw/valet_observations.json")
    payload = JSON3.read(read("data/raw/valet_observations.json", String))
    records = payload["observations"]
    data = DataFrame(Tables.dictrowtable(records))
    
    # 2. Check inputs
    
    @assert nrow(data) > 0 "https://www.bankofcanada.ca/valet/observations/V39079/json?recent=3 returned no rows"
    
    # 3. Prepare data
    
    # Standard cleaning: snake_case names, trimmed text, empty strings as missing.
    
    data = @chain data begin
        @clean_names
    end
    data = mapcols(
        col -> eltype(col) <: Union{Missing, AbstractString} ?
            [ismissing(x) || isempty(strip(x)) ? missing : strip(x) for x in col] : col,
        data,
    )

Connexion

Ajoutez-le à votre client

Votre client lance le serveur avec uv au besoin. Il n'y a rien à héberger ni aucun port à ouvrir.

Installation complète, hébergement et dépannage

Claude Code

Exécutez cette commande une fois dans un terminal. --scope user rend le serveur accessible dans tous les projets ; sans cette option, il n'est ajouté qu'au projet courant.

Terminal
claude mcp add --scope user maplestats -- uvx maplestats-mcp

Claude Desktop

Dans Claude Desktop, ouvrez Réglages, puis Développeur, puis Modifier la configuration. Ajoutez le serveur au fichier qui s'ouvre, enregistrez et redémarrez Claude.

claude_desktop_config.json
{
  "mcpServers": {
    "maplestats": {
      "command": "uvx",
      "args": ["maplestats-mcp"]
    }
  }
}

Le fichier se trouve dans ~/Library/Application Support/Claude/claude_desktop_config.json sous macOS et dans %APPDATA%\Claude\claude_desktop_config.json sous Windows.

Cursor

Le lien ouvre Cursor avec l'entrée déjà remplie. Pour l'ajouter à la main, placez-la dans ~/.cursor/mcp.json pour tous les projets, ou dans .cursor/mcp.json pour un seul projet.

~/.cursor/mcp.json
{
  "mcpServers": {
    "maplestats": {
      "command": "uvx",
      "args": ["maplestats-mcp"]
    }
  }
}

VS Code

Pour l'ajouter à la main, notez que VS Code utilise la clé servers, et non mcpServers. Placez ceci dans .vscode/mcp.json d'un espace de travail, ou lancez la commande MCP: Open User Configuration dans la palette de commandes pour l'ajouter à tous vos espaces de travail.

.vscode/mcp.json
{
  "servers": {
    "maplestats": {
      "type": "stdio",
      "command": "uvx",
      "args": ["maplestats-mcp"]
    }
  }
}

Codex CLI

Ajoutez-le depuis le terminal, ou écrivez vous-même la même entrée dans ~/.codex/config.toml.

Terminal
codex mcp add maplestats -- uvx maplestats-mcp
~/.codex/config.toml
[mcp_servers.maplestats]
command = "uvx"
args = ["maplestats-mcp"]

Gemini CLI

Ajoutez-le depuis le terminal (-s user pour tous les projets), ou écrivez l'entrée dans ~/.gemini/settings.json, à côté des réglages qui s'y trouvent déjà.

Terminal
gemini mcp add -s user maplestats uvx maplestats-mcp
~/.gemini/settings.json
{
  "mcpServers": {
    "maplestats": {
      "command": "uvx",
      "args": ["maplestats-mcp"]
    }
  }
}

Autres clients

La plupart des clients MCP acceptent cette entrée mcpServers. Si vous avez installé la commande avec uv tool install ou pip, utilisez "command": "maplestats-mcp" et retirez args.

JSON
{
  "mcpServers": {
    "maplestats": {
      "command": "uvx",
      "args": ["maplestats-mcp"]
    }
  }
}

Remerciements

MapleStats s'appuie sur le travail ouvert de nombreuses personnes. Il a tiré des leçons des nombreux serveurs MCP de données canadiennes et gouvernementales qui l'ont précédé, et une bonne part de son architecture et de son inspiration vient d'EcuDataMCP, mon autre projet, un serveur MCP pour les données ouvertes du gouvernement de l'Équateur.

Des paquets libres existants ont aussi aidé, surtout les paquets R de Jens von Bergmann (mountainMath) et de leurs coauteurs :

  • cmhc Le module de la SCHL a été vérifié par rapport à sa rétro-ingénierie du Portail de l'information sur le marché de l'habitation.
  • cansim Le code R que reproduce_code écrit pour les tableaux et vecteurs de Statistique Canada l'utilise.
  • cancensus Un modèle pour l'accès aux données du recensement en R.
  • canivt Lit les fichiers Beyond 20/20. Les tableaux du recensement et les dépôts Borealis offerts seulement dans ce format lui sont confiés.

Merci aux développeurs qui ont conçu et partagé ces outils, et à toutes les personnes qui publient des données canadiennes au grand jour.

Pour d'autres façons d'obtenir des données canadiennes, dont certains de ces paquets, voyez les autres options à la page À propos.

Un MCP pour que l'Agent les trouve, un MCP pour les réunir tous.

L'anneau : 30 éditeurs fédéraux à l'extérieur, les provinces et les villes dotées de sources locales à l'intérieur, et 215 outils en arcs par sujetACFC · AchatsCanada · ACIA · ARC · Banque du Canada · Borealis · Bureau de la concurrence · CCG · CCL · DPB · ECCC · Élections Canada · Gazette du Canada · ICIS · Infobase de la santé (ASPC) · InfoBase du GC · IRCC · ISDE · Marées du MPO · OpenParliament · Rappels · Régie de l'énergie · RNCan énergie · RNCan toponymes · RNCan zones brûlées · SCHL · Séismes Canada · Sénat · StatCan · Transports Canada · Colombie-Britannique · Surrey · Vancouver · Victoria · Alberta · Airdrie · Calgary · Edmonton · Grande Prairie · Lethbridge · Medicine Hat · Parkland · Red Deer · St. Albert · Strathcona · Sturgeon · Saskatchewan · Regina · Saskatoon · Manitoba · Winnipeg · Ontario · Aurora · Durham · Hamilton · Kitchener · London · Markham · Mississauga · Newmarket · Ottawa · Peel · Toronto · Waterloo · Windsor · York · Québec · Montréal · Nouveau-Brunswick · Nouvelle-Écosse · Halifax · Île-du-Prince-Édouard · Terre-Neuve-et-Labrador · Yukon · Territoires du Nord-Ouest · Statistique : statistiques et recensement (62)Provinces et villes : catalogues de données ouvertes, provincial, municipal (47)Argent et affaires : monnaie, prix et finances publiques, entreprises, PI et concurrence (31)Terre et énergie : agriculture et alimentation, environnement et risques naturels, énergie, géographie, transport et sécurité (31)Population : santé, logement, immigration (22)Parlement : parlement, droit et élections (20)Statistique 62Provinces et villes 47Argent et affaires 31Terre et énergie 31Population 22Parlement 20215outils,une connexion
Voir les données
Les 215 outils par sujet (les arcs) ; les outils propres à MapleStats ne comptent que dans le total
SujetOutils
Statistique : statistiques et recensement62
Provinces et villes : catalogues de données ouvertes, provincial, municipal47
Argent et affaires : monnaie, prix et finances publiques, entreprises, PI et concurrence31
Terre et énergie : agriculture et alimentation, environnement et risques naturels, énergie, géographie, transport et sécurité31
Population : santé, logement, immigration22
Parlement : parlement, droit et élections20