Skip to main content
Glama
System09192

Légifrance MCP Server

by System09192
README.md
# Légifrance MCP Server

フランスの法典条文を、条番号を指定して都度検索・取得できるMCPサーバー(Streamable HTTP)です。
Claude Desktopのカスタムコネクタとして登録することで、Claudeに「Code civil の第1104条を教えて」のように聞くと、
Légifrance公式API(PISTE経由)から実際の条文本文を取得して回答できるようになります。

## 提供するツール

- `get_code_article(codeName, articleNumber)`
  - `codeName`: 法典名。例: `Code civil`, `Code pénal`, `Code du travail`
  - `articleNumber`: 条番号。例: `1104`, `L1231-1`

## 1. ローカルでの動作確認

```bash
npm install
cp .env.example .env
# .env を編集し、PISTE_CLIENT_ID / PISTE_CLIENT_SECRET を設定
npm start
```

起動後、`http://localhost:3000/health` にアクセスして `ok` が返れば起動成功です。

### /search のレスポンス構造を必ず事前確認してください

`server.js` 内の `searchArticleId()` 関数は、`/search` エンドポイントのレスポンスから
条文ID(LEGIARTI)を取り出す処理が**推測に基づいています**。本番投入前に、必ず単体で

```bash
curl -X POST 'https://sandbox-api.piste.gouv.fr/dila/legifrance/lf-engine-app/search' \
--header 'Authorization: Bearer <取得したトークン>' \
--header 'Content-Type: application/json' \
--data-raw '{
  "recherche": {
    "champs": [
      {"typeChamp": "NUM_ARTICLE", "criteres": [{"typeRecherche": "EXACTE", "valeur": "1104", "operateur": "ET"}], "operateur": "ET"}
    ],
    "filtres": [{"facette": "NOM_CODE", "valeurs": ["Code civil"]}],
    "pageNumber": 1, "pageSize": 5, "operateur": "ET", "sort": "PERTINENCE", "typePagination": "DEFAUT"
  },
  "fond": "CODE_DATE"
}'
```

を実行し、返ってきたJSONの中でLEGIARTI IDがどのキーに入っているかを確認したうえで、
`server.js`の`searchArticleId()`内のパース処理(`first?.titles?.[0]?.id ?? first?.id`の部分)を
実際の構造に合わせて修正してください。

## 2. 公開サーバーへのデプロイ

Claude DesktopはAnthropicのクラウドからこのサーバーに接続するため、
**パブリックインターネットからHTTPSで到達可能な場所**にデプロイする必要があります
(自宅Mac上でローカルに起動しただけでは動きません)。

選択肢の例:
- Render / Railway / Fly.io などのPaaS(無料枠あり、Node.jsアプリを`git push`だけでデプロイ可能)
- 自前のVPS + リバースプロキシ(nginx等)でHTTPS終端

デプロイ時は、環境変数 `PISTE_ENV` / `PISTE_CLIENT_ID` / `PISTE_CLIENT_SECRET` を
各サービスの環境変数設定画面から設定してください(`.env`ファイルをそのままアップロードしない)。

デプロイ後、`https://あなたのドメイン/mcp` がMCPエンドポイントのURLになります。

## 3. Claude Desktopへの登録

1. Claude Desktopを開く
2. Settings(または Customize) → Connectors → 「Add custom connector」
3. サーバーURL(例: `https://あなたのドメイン/mcp`)を入力して追加

登録はローカル端末ではなくClaudeアカウントに対して行われるため、
同じアカウントでログインした他のMac・Web版・モバイル版でも自動的に使えるようになります。

## セキュリティ上の注意

- `PISTE_CLIENT_SECRET` は絶対に公開リポジトリにコミットしない、チャットやログに貼らないでください。
- 本番運用する場合は、sandbox用とは別にproduction用アプリケーションをPISTEで作成し、
  対応するCGU同意・API紐付けを行ってください。
- 万一client_secretが漏洩した場合は、PISTE管理画面から再生成(ローテーション)してください。