Skip to main content

fabric-semantic-mcp

Preguntale a tus datos de Microsoft Fabric. En castellano. Sin escribir DAX.

CI License: MIT Python 3.10+ Solo lectura


🧑  ¿cuanto vendimos por categoria el trimestre pasado?

🤖  Categoria A    1.240.500
    Categoria B      880.300
    Categoria C      415.900

Eso es todo. Conectás Claude a tu modelo semántico de Fabric y le preguntás como le preguntarías a un analista.


En tres frases

🎯 Usa las medidas oficiales de tu empresa. Los mismos números que tus tableros, no un cálculo paralelo.
🔒 No puede romper nada. Solo lectura, y solo modelos semánticos. Nunca escribe.
⚡ Se instala en dos minutos. Sin registrar apps en Azure, sin pedirle permisos a TI.

Instalación

1. Iniciá sesión en Azure (una sola vez):

az login

2. Agregá el servidor a Claude Code:

claude mcp add fabric-semantic -- uvx --from git+https://github.com/PatoSuar3z/fabric-semantic-mcp fabric-semantic-mcp

3. Decile a Claude: "conectate a Fabric"

Otros clientes MCP (Claude Desktop, etc.)

En claude_desktop_config.json:

{
  "mcpServers": {
    "fabric-semantic": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/PatoSuar3z/fabric-semantic-mcp",
        "fabric-semantic-mcp"
      ]
    }
  }
}

Requiere Python 3.10+, uv y Azure CLI.


Cómo se usa

Claude te lleva de la mano, paso a paso:

 ①  ¿Tenés sesión de Azure?           →  si no, te explica cómo iniciarla
 ②  Estas son tus áreas de trabajo    →  elegís una
 ③  Estos son sus modelos semánticos  →  elegís uno
 ④  Estudiando el modelo...           →  tablas, medidas, relaciones, valores
 ▶️  Listo. Preguntá lo que quieras.

El paso ④ se paga una sola vez por modelo.


Preguntas que puede responder

¿cuánto vendimos por región este año?

¿cómo se calcula el margen bruto? — te muestra el DAX de la medida

comparame las ventas de este trimestre contra el anterior

¿qué valores puede tomar la columna Estado?

Y siempre te muestra el DAX que ejecutó, así podés auditarlo.


🔒 Por qué es seguro

No puede modificar nada. No existe ninguna operación de escritura en el servidor. Cualquier consulta que no empiece con EVALUATE o DEFINE se rechaza antes de salir de tu computadora.

No puede ver lo que vos no podés ver. Actúa con tu identidad y tus permisos.

Y esta es la parte importante:

Solo consulta modelos semánticos — nunca lakehouses ni warehouses.

El modelo semántico aplica Row Level Security. El SQL endpoint de un lakehouse no. Una herramienta que consulta lakehouses puede devolverle a alguien filas que su propio tablero le oculta.

Al limitarse al modelo semántico, esta herramienta hereda exactamente los permisos que tu organización ya definió, y no puede exponer un solo dato nuevo.

Sin telemetría: nada sale de tu equipo más allá de las APIs de Microsoft.



🛠️ Las 11 herramientas


Tool Qué hace
check_azure_login Verifica la sesión y guía el login
list_workspaces · select_workspace Descubrir y elegir área de trabajo
list_models · select_model Descubrir y elegir modelo semántico
learn_model Lee el TMDL y perfila el modelo
setup_status En qué paso del flujo estás
get_model_schema Esquema completo o de una tabla
search_model Búsqueda difusa, para modelos con cientos de medidas
get_measure_definition El DAX de una medida
resolve_values Valores reales de una columna
run_dax Ejecuta la consulta, solo lectura
reset_session Volver a empezar

Todas declaran readOnlyHint, así tu cliente MCP puede mostrarte que este servidor no modifica nada.

🧠 Qué aprende del modelo


learn_model no se limita a leer nombres de columnas:

  • Tablas, columnas y tipos, descartando las tablas de fecha automáticas que Power BI crea por detrás y que solo son ruido.
  • Cada medida con su expresión DAX completa. Esto permite responder "¿cómo se calcula este indicador?" sin abrir Power BI Desktop, y evita el error clásico de reproducir una medida a mano y obtener un número distinto al del tablero.
  • Las relaciones entre tablas.
  • Los valores reales de las columnas de corte de baja cardinalidad.

Ese último punto es el que más cambia la calidad de las respuestas. El usuario dice "exportación", el dato dice EX. Sin ese perfilado, el filtro devuelve cero filas y la respuesta es incorrecta.

⚙️ Cómo funciona por dentro


Dos APIs de Microsoft, cada una para lo que sabe hacer:

API Para qué
🔍 api.fabric.microsoft.com Descubrir workspaces, modelos, y leer el TMDL
⚡ api.powerbi.com Ejecutar el DAX vía executeQueries

Por qué el esquema no se lee con DAX. Lo intuitivo sería pedir la metadata con INFO.TABLES() e INFO.MEASURES(). No funciona: executeQueries bloquea las funciones de metadata y las DMVs, y devuelve el error opaco 3239575574.

La ruta que sí funciona es getDefinition de la Fabric API, que devuelve el TMDL completo del modelo. Sale mejor que la idea original: el TMDL trae además la expresión DAX de cada medida, que INFO.* nunca hubiera dado.

No se necesita capacidad Premium ni XMLA habilitado: funciona con Power BI Pro.

💾 Qué se guarda en tu equipo


En ~/.fabric-semantic-mcp/:

  • session.json — qué área de trabajo y qué modelo elegiste.
  • models/*.json — el esquema del modelo y los valores de sus columnas de baja cardinalidad.

Ese caché contiene metadata y valores de tu modelo. Si trabajás con información sensible, borralo al terminar:

rm -rf ~/.fabric-semantic-mcp

❓ Preguntas frecuentes


¿Puede borrar o modificar mis datos? No. No existe ninguna tool de escritura, y hay una validación que rechaza cualquier consulta que no sea de lectura antes de enviarla.

¿Ve datos que yo no debería ver? No. Actúa con tu identidad y el modelo aplica su Row Level Security igual que cuando abrís un informe.

¿Necesito capacidad Premium o Fabric? No. Funciona con Power BI Pro, porque no usa XMLA.

¿Tengo que pedirle algo a mi área de TI? En general no: se usa la sesión de Azure CLI existente. Solo vas a necesitar ayuda si tu organización bloquea las APIs de Fabric por política, o si no tenés permiso de lectura sobre el área de trabajo.

¿Y si quiero escribir en Fabric? Este proyecto nunca lo va a hacer — es su garantía de seguridad. Existen otros MCP de Fabric con capacidades de escritura; la combinación correcta es instalar los dos por separado, para que cada uno declare honestamente lo que puede hacer.

¿Por qué la instalación es tan larga? Porque todavía no está publicado en PyPI. Cuando lo esté, va a ser simplemente uvx fabric-semantic-mcp.

⚠️ Limitaciones conocidas


Limitación Detalle
Calidad de la documentación Un modelo sin descripciones en sus medidas da respuestas menos confiables
Pensado para agregaciones executeQueries permite una consulta por request y hasta 100.000 filas
Modelos muy grandes Con cientos de medidas, usá search_model en vez de volcar el esquema entero
Perfilado inicial En un modelo grande, learn_model puede tardar cerca de un minuto. Es una sola vez


Contribuir

Las mejoras son bienvenidas: código, documentación, o simplemente contar cómo te fue contra tu propio tenant. Los tests corren sin red y sin acceso a Fabric, así que podés contribuir aunque no tengas un entorno a mano.

git clone git@github.com:PatoSuar3z/fabric-semantic-mcp.git
cd fabric-semantic-mcp
uv venv && uv pip install -e ".[dev]"
uv run pytest

Leé CONTRIBUTING.md antes de abrir un PR — sobre todo la sección de alcance.


Metadata

Release files for fabric-semantic-mcp 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fabric-semantic-mcp 0.1.0
File Size Uploaded
fabric_semantic_mcp-0.1.0.tar.gz 23.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fabric-semantic-mcp 0.1.0
File Interpreter ABI Platform
fabric_semantic_mcp-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 43.7 kB

Release files / fabric_semantic_mcp-0.1.0.tar.gz

Download URL fabric_semantic_mcp-0.1.0.tar.gz
Size 23.8 kB
Tags Source
SHA-256 checksum
How to use checksums
ccb0a0b32835350a46a6d4e784022cc935f1bf79d21b2246fb1212a984682bcc
BLAKE2b-256 checksum
How to use checksums
20d8e949ad8be173e29d24faf27936be07ee8405c7dc62edf4658d7a5a28ce97
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 28, 2026.

Transparency log

Release files / fabric_semantic_mcp-0.1.0-py3-none-any.whl

Download URL fabric_semantic_mcp-0.1.0-py3-none-any.whl
Size 19.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
500fac76c6250eaa7bc8e4742356f8e9d7842cb85560b334cb39dd08015bf55c
BLAKE2b-256 checksum
How to use checksums
ae9b41eec86b2e0401c16d33be6464db2882851bfd4655a6cd7704d5d2495009
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 28, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.0

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page