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. 01跨 SAT 名单判定 RFC 风险
  2. 02最多核验 500 个 RFC
  3. 03支持重音不敏感的名称搜索
  4. 04查看名单状态和导入数量
  5. 05带新鲜度检查的数据更新
  6. 06可选 AI 生成组合摘要

适用场景

  1. 01供应商入驻前筛查 RFC
  2. 02审查最多 500 个 RFC 的组合
  3. 03按个人或公司名称搜索 SAT 记录

MCP 相关

向 MCP 客户端提供 RFC 核验、批量核验、名称搜索、数据状态、更新和组合摘要工具。支持 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

用于查询 SAT 公开名单的 Python / FastMCP MCP(Model Context Protocol) 服务:

  • CFF 第 69-B 条(EFOS) — 模拟交易:推定、已驳回、最终认定、判决有利。
  • CFF 第 69-B Bis 条 — 不当转让减少税务亏损的权利:最终认定、判决有利。这是纳税人的风险信号,但其本身不会使纳税人的 CFDI 无效。名单很小:全国共有 3 条记录(2026 年 9 月),因此个位数的计数是正常的,并非导入失败。
  • CFF 第 69 条 — 税务状况已确定:已确定、可强制执行、无法定位、已取消、已免除。

架构与 SSC-CDMX 调动 MCP 相同:FastMCP,采用 stdio + Streamable HTTP 传输,使用 OAuth 2.1(WorkOS AuthKit),并回退到静态 bearer,持久化至 Turso(libSQL),可选用下载代理,并在 Render 上通过外部 cron(GitHub Actions)部署。无需 OCR:SAT 的 CSV 已经是结构化数据。

工具

工具功能
verificar_rfc验证 RFC → 风险判定(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(M2M bearer),/mcp(OAuth 或 bearer)。
  • pipeline.py — 下载 → SHA-256(未变化则跳过)→ Latin-1 解析 → 新鲜度保护 → 替换 SQLite 中的数据 → 推送至 Turso。 如果新文件在已有数据时包含 0 行、行数比之前减少超过 10%,或声明的 SAT 日期早于已导入日期,新鲜度保护就会中止替换:替换操作具有破坏性,且数据源来自第三方。下限按比例计算,而非绝对最小值,因为名单规模从 243k 行到 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" }
  }
}

(也可以在虚拟环境已激活时使用 "command": "python", "args": ["-m", "sat69"]。)

在 Render 上部署

render.yaml 使用原生 Python 运行时配置 Web 服务(无需 Docker):

  1. 将仓库推送到 GitHub,并在 Render 中创建一个指向 render.yaml 的 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。
身份验证(两种模式,与 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(11:30 UTC ≈ 05:30 CDMX)。仓库 Secrets: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 · Datos Abiertos)

  • 69-B:Listado_Completo_69-B.csv(约 14 k 条记录,20 列,第 3 行为表头)。
  • 69:Firmes.csv、Cancelados.csv、NoLocalizados.csv、Exigibles.csv、Sentencias.csv、Condonados.csv(约 ½ 百万条记录,6 列)。URL 位于 config.py 中。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。