mcpField
S
SAT69 — Listas negras del SAT (69, 69-B, 69-B Bis y CSD)

SAT69 — Listas negras del SAT (69, 69-B, 69-B Bis y CSD)

リモート
github.com/edbror法務・行政06 日前に更新
リポジトリ

SAT69 — Listas negras del SAT (69, 69-B, 69-B Bis y CSD) について

メキシコ SAT の公開税務リスク名簿で RFC を照合する MCP サーバーです。決定論的なリスク判定、バッチ照合、名称検索を備え、任意で自然言語のポートフォリオ要約も作成します。

主な機能

  1. 01SAT 名簿に基づく RFC リスク判定
  2. 02最大 500 件の一括照合
  3. 03アクセントを区別しない名称検索
  4. 04名簿の状態と取込件数の確認
  5. 05鮮度チェック付きデータ更新
  6. 06任意の AI ポートフォリオ要約

活用シーン

  1. 01取引先登録前の RFC 確認
  2. 02最大 500 件の RFC ポートフォリオ審査
  3. 03個人名や会社名による SAT 記録検索

MCP 対応

RFC 照合、一括照合、名称検索、データ状態確認、更新、ポートフォリオ要約のツールを MCP クライアントに公開します。stdio と Streamable HTTP に対応し、OAuth 2.1 または bearer 認証を利用できます。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://sat69.watr.mx/connect
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

MCP SAT 69 / 69-B · WATR

Python / FastMCP 製の MCP(Model Context Protocol)サーバーです。SAT の公開リストを照会します。

  • CFF 第69-B条(EFOS) — 架空取引:Presunto(推定), Desvirtuado(反証済み), Definitivo(確定), Sentencia Favorable(有利な判決)。
  • CFF 第69-B Bis条 — 税務上の損失を控除する権利の不正な譲渡:Definitivo(確定), Sentencia Favorable(有利な判決)。納税者のリスクを示す情報ですが、それだけでCFDI が無効になるわけではありません。リストは非常に小さく、全国で3件(2026年9月)です。そのため、一桁の件数は正常であり、インポートの失敗ではありません。
  • CFF 第69条 — 確定した税務状況:確定、執行可能、所在不明、取消済み、免除済み。

SSC-CDMX の動員情報 MCP と同じアーキテクチャです。FastMCP による stdio + Streamable HTTP トランスポート、OAuth 2.1(WorkOS AuthKit) と 静的 bearer へのフォールバック、Turso(libSQL) への永続化、任意のダウンロードプロキシ、外部 cron(GitHub Actions)を使った Render へのデプロイを備えています。OCR は不要です。SAT の CSV はすでに構造化されています。

ツール

ツール機能
verificar_rfcRFC を確認し、リスク判定(CRITICO…LIMPIO、いずれかのリストにデータがない場合は NO_VERIFICADO)を返します。
verificar_lote最大500件の RFC を検証し、重要度別の該当項目のみを返します。
buscar_nombre名前/法人名で検索します(FTS5、アクセント記号を区別しません)。
estado_datosSAT が公表した有効期間、件数、最終インポート日時を返します。
actualizar_datosリストをダウンロードして同期します(ハッシュによる冪等処理、新鮮性ガード付き)。
resumen_carteraポートフォリオの自然言語によるエグゼクティブブリーフを作成します(最大500件の RFC)。

リスト間の重要度の優先順位: 69-B > 69-B Bis > 69。

⚠️ resumen_cartera は AI を使う唯一のツールで、文章の作成だけを行います。 各 RFC のリスクはルールエンジンが決定論的に計算します。モデルは、すでに確定した判定を受け取ってブリーフを作成するだけで、リスクの決定や変更は行いません。LLM_PROVIDER でプロバイダーを切り替えられます(デフォルトは DashScope 経由の qwen。anthropic と gemini も利用できます)。AI を設定していなくても、ツールは応答します。決定論的なデータを resumen: null とともに返します。

リスク: CRITICO(EFOS 確定) · ALTO(EFOS 推定) · MEDIO(69 確定/執行可能/所在不明) · BAJO(反証済み/有利な判決) · INFORMATIVO(69 取消済み/免除済み) · LIMPIO。

結果は、SAT の公開ファイルを最後にインポートした時点の情報を反映しています。税務または法務に関する助言ではありません。

アーキテクチャ

CSV del SAT (Latin-1)                     ┌────────── FastMCP ──────────┐
   │  fetcher (httpx + proxy opcional)    │ verificar_rfc / _lote        │
   ▼                                      │ buscar_nombre / estado_datos │
 pipeline (parse 69 / 69b)  ──►  SQLite ──┤ actualizar_datos             │
   │   (FTS5 unicode61, triggers)  ▲  │   └──────────┬──────────────────┘
   ▼                               │  │   stdio (server.py) + HTTP (web.py)
 Turso (libSQL, durable) ◄── push  │  └► pull al arranque      │
                                   └─────────────────── /health /refresh /reload
  • server.py — FastMCP(stdio)+ ツール + AuthKit。
  • web.py — Starlette/uvicorn(HTTP):/health(公開)、/refresh と /reload(bearer M2M)、/mcp(OAuth または bearer)。
  • pipeline.py — ダウンロード → SHA-256(変更がなければスキップ)→ Latin-1 で解析 → 新鮮性ガード → SQLite で置換 → Turso にプッシュ。 新しいファイルの行数が、既存データがあるのに0行の場合、以前の行数から10%を超えて減少した場合、または SAT の公表日がすでにインポート済みの日付より古い場合、新鮮性ガードが置換を中止します。置換は破壊的な処理であり、データソースは第三者が提供するものだからです。リストには24万3000行のものもあれば3行のものもあるため、下限は絶対値ではなく相対値です。
  • database.py — トリガー付きの SQLite + FTS5。RFC は B-tree インデックスで検索します(ホットパス)。
  • turso.py — Turso ↔ ローカル間の永続同期。
  • risk.py — RFC の正規化 + 判定ツリー(69-B は69より優先)。

ローカルへのインストール

cd sat69-mcp
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"

# Primera ingesta (descarga ~22 MB; el 69 son ~½ millón de filas)
python -c "from sat69 import database as db, config; db.init_db(config.settings.db_path)"
python -c "from sat69.pipeline import process_import; print(process_import())"

# Probar
pytest -q
Claude Desktop / Cowork に接続する(stdio)
{
  "mcpServers": {
    "sat69": { "command": "sat69-mcp" }
  }
}

(または、venv が有効な状態で "command": "python", "args": ["-m", "sat69"] を使用します。)

Render へのデプロイ

render.yaml は、ネイティブ Python ランタイム(Docker なし)でウェブサービスをプロビジョニングします。

  1. リポジトリを GitHub にプッシュし、render.yaml を指定して Render で Blueprint を作成します。
  2. 変数(sync:false として設定):MCP_API_KEY(Bearer)、任意の AUTHKIT_DOMAIN+BASE_URL(OAuth)、TURSO_DATABASE_URL+TURSO_AUTH_TOKEN。
  3. MCP エンドポイント:POST https://<servicio>.onrender.com/mcp。
認証(2 つのモード。movilizaciones と同様)
  • 静的 Bearer(MCP_API_KEY):シンプルな方式で、/mcp、/refresh、/reload を保護します。
  • OAuth 2.1(WorkOS AuthKit):AUTHKIT_DOMAIN+BASE_URL を設定すると、/mcp は Dynamic Client Registration を使用する OAuth に切り替わります。Bearer は引き続き M2M エンドポイントを保護します。
自動更新

.github/workflows/refresh.yml が毎日 POST /refresh を実行します(UTC 11:30 ≈ CDMX 05:30)。リポジトリのシークレット:RENDER_BASE_URL、MCP_API_KEY。手動実行:workflow_dispatch(force 付き)。

永続化(Turso)

ローカルの SQLite(Render 上では一時的で、/tmp に配置)がクエリを処理し、Turso が再デプロイ後も保持される永続ストアとなります。起動時に Turso からプルし、actualizar_datos//refresh の実行後にプッシュします。TURSO_* がない場合は、完全なローカルモードで動作します。

ダウンロードプロキシ(任意)

FETCH_PROXY または DATAIMPULSE_* は、CSV のダウンロードのみを経由させます。テストでは SAT はデータセンターの IP をブロックしませんでした(直接ダウンロードで 200 が返りました)。そのため通常は不要ですが、互換性と回復力のために残しています。

データソース(SAT · オープンデータ)

  • 69-B:Listado_Completo_69-B.csv(約 1.4 万件、20 列、ヘッダーは 3 行目)。
  • 69:Firmes.csv、Cancelados.csv、NoLocalizados.csv、Exigibles.csv、Sentencias.csv、Condonados.csv(約 50 万件、6 列)。URL は config.py にあります。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。