# Les outils

> Les six outils du serveur MCP, leurs paramètres et ce qu'ils coûtent. Lire est gratuit, débloquer un correctif décompte un correctif.

Chaque description d'outil rappelle les règles à l'agent : Rustine ne scanne que les sites des projets de l'utilisateur, en lecture seule, jamais un site qui n'est pas à lui, et ne modifie jamais le code.

## list_projects

Tes projets et leurs sites : vérifié ou non, score sur 100, note de A à F, dernier scan, problèmes ouverts. **Gratuit.** Permission `scans:read`.

Aucun paramètre.

## run_scan

Scanne un site **déjà dans tes projets** et attend le résultat (jusqu'à une minute environ) : score, note et problèmes par gravité. Si le scan tourne encore, l'agent rappelle l'outil avec la même cible pour continuer d'attendre. **Un scan de ton quota** ; un scan du même type dans l'heure renvoie le résultat récent sans rien décompter. Permission `scans:run`.

| Paramètre | Type | | Description |
| --- | --- | --- | --- |
| `target` | string | obligatoire | id de site, id de projet (s'il n'a qu'un site) ou URL d'un site de tes projets |
| `kind` | `quick` \| `audit` | défaut `quick` | `audit` seulement sur un site prouvé |

## list_issues

Les problèmes, du plus grave au moins grave, avec leur confiance ; pour un dépôt, le fichier, la ligne et le commit. Les problèmes d'un site non prouvé restent masqués (seul leur nombre apparaît). **Gratuit.** Permission `scans:read`.

| Paramètre | Type | | Description |
| --- | --- | --- | --- |
| `project` | string | optionnel | id de projet |
| `target` | string | optionnel | id ou URL d'un site |
| `status` | `open` \| `all` | défaut `open` | `all` ajoute les corrigés, faux positifs et risques acceptés, avec la raison et l'agent qui les a marqués |

## get_fix

Renvoie le correctif d'un problème : des instructions écrites pour un agent de code. **Un correctif de ton offre au premier appel** pour ce problème, gratuit ensuite. L'agent est invité à te demander avant d'en débloquer beaucoup. Permission `fixes:unlock`.

| Paramètre | Type | | Description |
| --- | --- | --- | --- |
| `issue_id` | string (UUID) | obligatoire | id venu de `list_issues` |

## recheck_issue

Revérifie un problème : sur le site en ligne, ou pour un dépôt en relançant une analyse de la branche par défaut (au plus une par quart d'heure). Répond `fixed`, `stillOpen` avec la preuve, ou `pending` (analyse pas finie : `run_scan` sur le dépôt un peu plus tard). **Gratuit**, dans la limite de 60 par projet et par jour. Permission `scans:run`.

| Paramètre | Type | | Description |
| --- | --- | --- | --- |
| `issue_id` | string (UUID) | obligatoire | id venu de `list_issues` |

## set_issue_status

Marque un problème comme faux positif (il sort du score) ou risque accepté (il y reste), ou le rouvre. La raison s'affiche dans l'app avec le nom de l'agent. L'agent ne doit marquer un faux positif qu'après avoir vérifié que la valeur est fausse ou injoignable, et passer par `recheck_issue` pour un problème corrigé. **Gratuit.** Permission `issues:write`.

| Paramètre | Type | | Description |
| --- | --- | --- | --- |
| `issue` | string (UUID) | obligatoire | id venu de `list_issues` |
| `status` | `falsePositive` \| `acceptedRisk` \| `open` | obligatoire | `open` annule un marquage |
| `reason` | string | obligatoire | 10 à 500 caractères : ce qui a été vérifié (fichier, ligne, pourquoi la valeur est fausse) |

Une connexion OAuth autorisée avant le 13/10/2026 n'a pas `issues:write` : `set_issue_status` lui demande de déconnecter puis reconnecter Rustine.

## Quand l'offre ne suit pas

Un quota épuisé ou une offre sans MCP ne donne jamais un `403` : l'outil répond par une erreur lisible (`isError: true`), dans la langue de l'utilisateur, avec le lien pour changer d'offre.

## Exemples

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "run_scan",
    "arguments": { "target": "https://monsaas.fr", "kind": "quick" }
  }
}
```
