{{> head}} {en}Contributing{fr}Contribuer{/} · MapleStats MCP {{> header}}

{en}Contributing{fr}Contribuer{/}

{en}Help build MapleStats{fr}Aidez à bâtir MapleStats{/}

{en}MapleStats is open source and grows one source at a time. You can help without writing any code: report a wrong number, suggest a source, or share how you used it. If you do write code, this page walks through the whole process, from the first issue to the live site.{fr}MapleStats est un logiciel libre qui grandit une source à la fois. Vous pouvez aider sans écrire une ligne de code : signaler un chiffre erroné, proposer une source ou raconter comment vous l'avez utilisé. Si vous écrivez du code, cette page décrit tout le processus, du premier ticket jusqu'au site en ligne.{/}

{en}Ways to help{fr}Façons d'aider{/}

{en}Report a wrong or missing number{fr}Signaler un chiffre erroné ou manquant{/}

{en}Open an issue with the question you asked, the tool call and the source URL from the result's provenance. A wrong number is the most useful bug report there is.{fr}Ouvrez un ticket avec la question posée, l'appel d'outil et l'URL de la source indiquée dans la provenance du résultat. Un chiffre erroné est le signalement le plus utile qui soit.{/}

{en}Report a number{fr}Signaler un chiffre{/}

{en}Suggest a source{fr}Proposer une source{/}

{en}Name the agency or portal and link to where its data lives. The roadmap lists every source checked so far, including the ones that could not be added and why.{fr}Nommez l'organisme ou le portail et indiquez où se trouvent ses données. La feuille de route énumère chaque source examinée jusqu'ici, y compris celles qui n'ont pas pu être ajoutées, et pourquoi.{/}

{en}Suggest a source{fr}Proposer une source{/} · {en}Roadmap{fr}Feuille de route{/}

{en}Share a case study{fr}Partager une étude de cas{/}

{en}Used MapleStats for real work? Open an issue with the question, what the agent found and the calls it made. Good ones join the case studies.{fr}Vous avez utilisé MapleStats pour un vrai travail? Ouvrez un ticket avec la question, ce que l'agent a trouvé et les appels qu'il a faits. Les meilleurs exemples rejoignent les études de cas.{/}

{en}Share a case study{fr}Partager une étude de cas{/}

{en}French speakers help too: every tool carries French search keywords and every page is bilingual. If a phrase reads like a translation, open an issue or send a fix.{fr}Les francophones aident aussi : chaque outil porte des mots-clés de recherche en français et chaque page est bilingue. Si une phrase sonne comme une traduction, ouvrez un ticket ou proposez une correction.{/}

{en}The process for code{fr}Le processus pour le code{/}

01

{en}Open an issue first{fr}Ouvrir d'abord un ticket{/}

{en}Say what you want to add or fix before you write code, so nobody duplicates work and the approach is agreed early. For a new source, link its API documentation or data page.{fr}Dites ce que vous voulez ajouter ou corriger avant d'écrire du code, pour que personne ne fasse le travail en double et que l'approche soit convenue tôt. Pour une nouvelle source, donnez le lien vers la documentation de son API ou sa page de données.{/}

02

{en}Set up and read AGENTS.md{fr}Préparer le poste et lire AGENTS.md{/}

{en}Fork the repository, clone it and install with uv. Then read AGENTS.md: it is the working guide for people and agents alike. It explains how a module is laid out, the response contract every tool follows, and three lines that look removable but are not.{fr}Faites une bifurcation (fork) du dépôt, clonez-le et installez-le avec uv. Lisez ensuite AGENTS.md : c'est le guide de travail des personnes comme des agents. Il explique la structure d'un module, le contrat de réponse que suit chaque outil et trois lignes qui semblent superflues mais ne le sont pas.{/}

{en}Terminal{fr}Terminal{/}
git clone {{repo}}.git
cd maplestats-mcp
uv sync

03

{en}Build against the real API{fr}Travailler avec la vraie API{/}

{en}A new source starts as a copy of modules/_example/: typed responses that carry their provenance, errors that are raised rather than returned, and a docstring with English and French search keywords. Before calling a client done, call every function it exports against the live API with realistic arguments. Mocked tests only prove the code does what you assumed the API does; an audit of this project that called every tool live found nine bugs the mocks had missed.{fr}Une nouvelle source commence par une copie de modules/_example/ : des réponses typées qui portent leur provenance, des erreurs levées plutôt que renvoyées, et une docstring avec des mots-clés de recherche en anglais et en français. Avant de considérer un client comme terminé, appelez chacune de ses fonctions sur l'API réelle, avec des arguments réalistes. Les tests simulés prouvent seulement que le code fait ce que vous pensiez que l'API fait; un audit de ce projet qui a appelé chaque outil en direct a trouvé neuf bogues que les simulations avaient manqués.{/}

04

{en}Test it, and list it{fr}Le tester et le répertorier{/}

{en}Add mocked unit tests for the client (with pytest-httpx), covering the quirks the real API has, and a live smoke step for every tool in scripts/smoke_test_modules.py. Then add the module to SOURCES in scripts/build_site.py, so the website can name it. A test fails if either is missing.{fr}Ajoutez des tests unitaires simulés pour le client (avec pytest-httpx), qui couvrent les particularités de la vraie API, et une étape de test en direct pour chaque outil dans scripts/smoke_test_modules.py. Ajoutez ensuite le module à SOURCES dans scripts/build_site.py, pour que le site puisse le nommer. Un test échoue si l'un ou l'autre manque.{/}

05

{en}Run the checks{fr}Lancer les vérifications{/}

{en}The same four checks that run in CI. All four must pass before a pull request is reviewed.{fr}Les quatre mêmes vérifications que l'intégration continue. Les quatre doivent réussir avant l'examen d'une demande de fusion.{/}

{en}Terminal{fr}Terminal{/}
uv run ruff check src tests scripts
uv run ruff format --check src tests scripts
uv run pyright
uv run pytest -q

06

{en}Open a pull request{fr}Ouvrir une demande de fusion{/}

{en}Describe what changed and how you checked it against the live source. CI runs the checks on Python 3.12 and 3.13, and a maintainer reviews the change. Small, focused pull requests are reviewed and merged faster.{fr}Décrivez ce qui a changé et comment vous l'avez vérifié auprès de la source en direct. L'intégration continue lance les vérifications sous Python 3.12 et 3.13, et une personne responsable examine le changement. Les demandes courtes et ciblées sont examinées et fusionnées plus vite.{/}

07

{en}After the merge{fr}Après la fusion{/}

{en}The website rebuilds and redeploys itself from the main branch, so a new tool appears on the Tools page and in the search with nothing done by hand. Every Monday, a scheduled job runs the live smoke tests against the real APIs, so an upstream change is caught even when no code changed.{fr}Le site se reconstruit et se redéploie tout seul à partir de la branche principale : un nouvel outil apparaît dans la page Outils et dans la recherche sans rien faire à la main. Chaque lundi, une tâche planifiée lance les tests en direct sur les vraies API, pour repérer un changement en amont même quand le code n'a pas bougé.{/}

{en}With a coding agent{fr}Avec un agent de programmation{/}

{en}The repository is set up for coding agents. Point yours at AGENTS.md first (CLAUDE.md in the repository points there too), and it follows the same process and runs the same checks.{fr}Le dépôt est conçu pour les agents de programmation. Dirigez d'abord le vôtre vers AGENTS.md (le fichier CLAUDE.md du dépôt y renvoie aussi); il suivra le même processus et lancera les mêmes vérifications.{/}

{en}Read AGENTS.md in this repository, then add a module for [the source] following it.{fr}Lis AGENTS.md dans ce dépôt, puis ajoute un module pour [la source] en le suivant.{/}

{en}Ground rules{fr}Règles de base{/}

  • {en}Contributions are released under the project's MIT licence.{fr}Les contributions sont publiées sous la licence MIT du projet.{/}
  • {en}The data stays with its publishers. MapleStats centralizes the interface, not the data, so do not commit copies of a source's data.{fr}Les données restent chez leurs éditeurs. MapleStats centralise l'interface, pas les données : ne versez pas de copies des données d'une source dans le dépôt.{/}
  • {en}No API keys or credentials in the code. Every source so far works without one.{fr}Aucune clé d'API ni aucun identifiant dans le code. Toutes les sources actuelles fonctionnent sans.{/}
  • {en}English and French together: a tool without French keywords cannot be found by a French query.{fr}L'anglais et le français ensemble : un outil sans mots-clés français est introuvable par une requête en français.{/}
{{> footer}}