# dce.read

Rechercher dans un dossier ou lire une pièce ciblée. L'identifiant canonique est annonce_id ; les modes sont décrits dans le schéma.

POST `/api/mcp/v1/dce.read` · contrat 1.0.0 · OAuth `mcp:read` · offre payante : false.

Outil MCP : `prescriptio_dce` ; même handler métier.

## Entrée

```json
{
  "additionalProperties": false,
  "anyOf": [
    {
      "required": [
        "query"
      ]
    },
    {
      "required": [
        "marche_id",
        "type"
      ]
    }
  ],
  "properties": {
    "filename": {
      "description": "Nom de la piece a lire dans un dossier MULTI-LOTS. Un nom approximatif suffit (ex \"CCTP lot 12\", \"chape\") : il est resolu contre les pieces reelles. Omis sur un dossier multi-lots, l'outil renvoie la TABLE DES MATIERES au lieu de coller tous les fichiers bout a bout.",
      "type": "string"
    },
    "marche_id": {
      "description": "Identifiant du dossier : marche_id (UUID) OU annonce_id betterplace (ex \"2833189\") — les deux sont acceptes. Requis en mode lecture.",
      "type": "string"
    },
    "page": {
      "default": 1,
      "description": "Page de lecture (~8000 caracteres) DANS la piece choisie. pages_total indique le total ; demander page:2, 3... pour la suite. Ne PAS feuilleter un dossier entier page par page : utiliser filename, ou query pour localiser.",
      "minimum": 1,
      "type": "integer"
    },
    "query": {
      "description": "Avec marche_id : cherche DANS ce dossier et renvoie les pieces qui parlent du terme (le moyen rapide de trouver le bon lot). Sans marche_id : recherche semantique globale dans tous les DCE (offre payante).",
      "type": "string"
    },
    "type": {
      "description": "Piece a lire : rc (reglement de consultation), cctp (clauses techniques), ccap (clauses administratives), dpgf/bpu (prix). Requis en lecture ; en recherche, restreint a ce type.",
      "enum": [
        "rc",
        "cctp",
        "ccap",
        "dpgf",
        "bpu"
      ],
      "type": "string"
    }
  },
  "type": "object"
}
```

## Exemple synthétique

```json
{
  "marche_id": "fixture-dce-001",
  "type": "rc"
}
```

## Sortie

```json
{
  "properties": {
    "action": {
      "enum": [
        "sommaire_dce",
        "lecture_dce",
        "recherche_dce",
        "recherche_dans_dossier"
      ]
    },
    "count": {
      "type": "integer"
    },
    "doc_type": {
      "type": "string"
    },
    "fichiers": {
      "items": {
        "properties": {
          "filename": {
            "type": "string"
          },
          "pages_estimees": {
            "type": "integer"
          },
          "parties": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "type": "array"
    },
    "fields": {
      "type": "object"
    },
    "filename": {
      "type": "string"
    },
    "hint": {
      "type": "string"
    },
    "marche_id": {
      "type": "string"
    },
    "ok": {
      "const": true
    },
    "page": {
      "type": "integer"
    },
    "pages_total": {
      "type": "integer"
    },
    "query": {
      "type": "string"
    },
    "results": {
      "items": {
        "properties": {
          "acheteur": {
            "type": [
              "string",
              "null"
            ]
          },
          "doc_type": {
            "type": [
              "string",
              "null"
            ]
          },
          "extrait": {
            "type": "string"
          },
          "filename": {
            "type": "string"
          },
          "lieu": {
            "type": [
              "string",
              "null"
            ]
          },
          "marche_id": {
            "type": "string"
          },
          "titre": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "type": "array"
    },
    "texte": {
      "type": "string"
    },
    "titre": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "ok",
    "action"
  ],
  "type": "object"
}
```

[Authentification, quotas, pagination et erreurs](/docs/reference/concepts.md). Les propriétés additionnelles des résultats historiques restent autorisées ; ce schéma n'invente pas les champs manquants.
