up-law-mcp
OfficialClick on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@up-law-mcpCitar el artículo 14 bis de la Constitución Nacional"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
legal-mcp-template
IA Lab · Facultad de Derecho — Universidad de Palermo (UP)
Una herramienta para que estudiantes de Derecho construyan su propio conector MCP legal y aprendan IA construyéndola, no consumiéndola.
Un conector MCP (Model Context Protocol) es un programa que le da herramientas a un asistente de IA como Claude. Este template te deja construir el tuyo: un servidor que responde consultas jurídicas y que, por construcción, no puede afirmar nada del derecho sin citar la fuente. Si una respuesta no tiene fundamento declarado, el programa se rompe a propósito.
Esa disciplina —el grounding— es justamente lo que reduce el riesgo de alucinación: el asistente no puede "inventar" una norma o un fallo, porque toda afirmación viaja con su cita o no sale. Es el deber de control que los tribunales ya están exigiendo, convertido en el comportamiento por defecto.
No hace falta saber programar. Vas a tocar dos archivos nada más:
my_tools.py (tus respuestas) y sources.yaml (tus fuentes).
Qué certifica el check (y qué no). Cuando
make checkda verde, eso significa "toda afirmación tiene una fuente declarada". No significa que el contenido jurídico sea correcto: eso lo revisa un humano. El verde es sobre la disciplina de citar, no sobre el derecho.
Instalación
Necesitás Python 3.11 o más nuevo. Elegí tu sistema operativo.
La forma más fácil: GitHub Codespaces (sin instalar nada)
Desde GitHub: botón Code → Codespaces → Create codespace. El entorno se arma
solo y corre make check al final. Si lo viste terminar en verde, ya está todo
listo y podés saltar a Construí tu propio conector.
macOS
Python. Verificá que tengas 3.11+:
python3 --versionSi no lo tenés, instalalo desde python.org o con Homebrew:
brew install python.Herramientas de compilación (para
make). Si nunca las instalaste:xcode-select --installDescargá el proyecto y entrá a la carpeta:
git clone <URL-del-repo> legal-mcp-template cd legal-mcp-templateCreá un entorno virtual e instalá (en Mac conviene siempre usar un venv):
python3 -m venv .venv source .venv/bin/activate make installComprobá que todo funciona:
make checkTiene que terminar en verde.
Cada vez que vuelvas a trabajar, reactivá el entorno con
source .venv/bin/activatedesde la carpeta del proyecto.
Windows
Python. Instalalo desde python.org y, en el instalador, tildá "Add Python to PATH". Verificá en PowerShell:
py --versionDescargá el proyecto y entrá a la carpeta:
git clone <URL-del-repo> legal-mcp-template cd legal-mcp-templateCreá un entorno virtual e instalá:
py -m venv .venv .venv\Scripts\activate pip install -e ".[dev]"Comprobá que todo funciona. Windows no trae
make, así que corré los tres pasos a mano (es exactamente lo que hacemake check):python -m ruff check . python -m legalmcp sources.yaml examples\consumidor\sources.yaml python -m pytestLos tres tienen que pasar.
¿Querés usar
makeen Windows? Podés instalarlo con Scoop (scoop install make) o Chocolatey (choco install make). No es obligatorio.
Related MCP server: Legal Court MCP Server
Probá el ejemplo
El proyecto trae un conector completo y funcionando sobre derechos del consumidor (Ley 24.240). Con el entorno activado:
cd examples/consumidor
python -m legalmcp.server(Esto levanta el servidor; cortalo con Ctrl+C.) Abrí
examples/consumidor/my_tools.py: son dos tools cortas, comentadas línea por
línea. Fijate cómo una de ellas, cuando la consulta cae fuera de su tema,
devuelve not_found=True en vez de inventar una respuesta. Ese es el patrón.
Conectarlo a Claude Desktop
Para usar tu conector dentro de la app Claude Desktop, editá su archivo de configuración:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
El archivo debe contener solo la clave mcpServers en el nivel superior.
Reemplazá /ruta/a/legal-mcp-template por la ruta real donde clonaste el
proyecto.
macOS:
{
"mcpServers": {
"consumidor": {
"command": "/bin/sh",
"args": [
"-c",
"cd /ruta/a/legal-mcp-template/examples/consumidor && exec /ruta/a/legal-mcp-template/.venv/bin/legal-mcp"
]
}
}
}Windows:
{
"mcpServers": {
"consumidor": {
"command": "cmd",
"args": [
"/c",
"cd /d C:\\ruta\\a\\legal-mcp-template\\examples\\consumidor && C:\\ruta\\a\\legal-mcp-template\\.venv\\Scripts\\legal-mcp.exe"
]
}
}
}Guardá, cerrá Claude Desktop por completo y volvé a abrirlo. Vas a ver las tools del conector disponibles. Probá: "¿qué garantía tengo si compro algo y sale fallado?" — debería citarte el artículo correspondiente.
El
cddel comando es necesario porque Claude lanza el servidor desde una carpeta cualquiera, y el servidor buscamy_tools.pyysources.yamlen el directorio actual.
Construí tu propio conector
1. Copiá una tool a tu my_tools.py y cambiale el texto
Abrí el my_tools.py de la raíz. Tiene una tool de ejemplo comentada.
Descomentala (sacale los #), poné tu propia respuesta jurídica en answer y
elegí un id de fuente para citar. Guiate por el ejemplo de consumidor.
La regla que no podés saltear: si escribís una respuesta en answer, tenés
que citar al menos una fuente con src("..."). Si no encontrás fundamento,
devolvé GroundedResponse(not_found=True).
2. Declará tu fuente en sources.yaml
src("mi_fuente") solo funciona si mi_fuente está declarada en sources.yaml.
Abrí sources.yaml, copiá el bloque de ejemplo y completá la cita. Si tenés la
URL oficial verificada, ponela; si no, dejala vacía y anotala como pendiente
en SOURCES.md. Nunca inventes una URL.
3. make check en verde
make check(En Windows, los tres comandos de la sección de instalación.) Esto corre el linter, la validación de tus fuentes y los tests. Si citaste una fuente que no declaraste, o escribiste una respuesta sin fuente, queda en rojo. Arreglalo hasta que dé verde.
4. Completá el manifiesto
Abrí mcp-manifest.yaml y poné tu nombre, tu dominio y la lista de ids de
fuentes que usás. Dejá review_status: borrador hasta que un humano revise el
contenido jurídico.
¡Listo! Tenés un conector MCP legal con grounding garantizado.
5. Sumá más tools (así enriquecés el contexto del MCP)
Cuantas más tools tenga tu conector, más temas puede responder con fundamento el asistente. Cada tool nueva es como agregarle a Claude un "ayudante" experto en un punto puntual del derecho. Agregar una es repetir la misma receta, sin tocar nada raro:
Copiá una tool que ya funcione (la tuya o una del ejemplo) y pegala más abajo en
my_tools.py, debajo de la anterior. No borres las que ya tenés.Cambiale el nombre de la función (la línea
def ...) por uno nuevo y distinto. Dos tools no pueden llamarse igual. Usá un nombre claro, en minúsculas y con guiones bajos:def licencia_por_maternidad(consulta):.Reescribí el docstring (el texto entre
"""..."""justo debajo deldef): explicá en una frase qué responde. Eso es lo que Claude lee para saber cuándo usarla.Cambiá el
answerpor tu respuesta jurídica, en lenguaje claro.Citá la fuente: poné en
sources=[src("...")]el id de la norma, y declará esa norma ensources.yaml(igual que en el paso 2 de arriba). Si no tenés fundamento para un caso, devolvéGroundedResponse(not_found=True).Corré
make check. Si te olvidaste de declarar una fuente, o escribiste una respuesta sin cita, el check te lo marca en rojo y te dice qué arreglar. Verde = tu tool nueva ya cumple el contrato y suma al conector.
Repetí esto cuantas veces quieras. No hay un paso 7: no tenés que "registrar" la
tool en ningún otro lado ni avisarle al servidor. Con solo escribirla con
@grounded_tool arriba, ya queda disponible la próxima vez que levantes el
conector.
La regla de siempre, también acá: una tool sin fuente no entra. Si dudás de dónde sale una afirmación, no la afirmes: usá
not_found=Truey, si hace falta, sugerí consultar la fuente oficial o a un humano.
Cómo está armado (para curiosos)
.
├── my_tools.py ← TU código (lo editás vos)
├── sources.yaml ← TUS fuentes (las declarás vos)
├── SOURCES.md ← de dónde sale cada fuente
├── mcp-manifest.yaml ← metadatos de tu conector
├── legalmcp/ ← el harness (NO se toca)
│ ├── contract.py ← GroundedResponse, Source, @grounded_tool (fail-closed)
│ ├── sources.py ← carga/valida sources.yaml; src(id) resuelve o se rompe
│ └── server.py ← arma el server FastMCP y registra tus tools
├── tests/ ← prueban que el contrato sirve
└── examples/consumidor/ ← ejemplo completo y forkeableEl harness es fino y se apoya directo en el SDK oficial de MCP (FastMCP): no hay lenguaje propio ni compilador que se pueda pudrir cuando el SDK evolucione.
Comandos
Comando | Qué hace |
| Instala el harness y las dependencias |
| Levanta tu servidor MCP |
| Corre los tests |
| Linter + validación de fuentes + tests (lo que mira CI) |
Seguridad
¿Encontraste una vulnerabilidad? Por favor reportala en privado antes de divulgarla. Mirá SECURITY.md — el contacto es gbarosio@gmail.com.
Autores
Guido Barosio
Juan Cruz Romano
Hernán Quadri
Aníbal Ramírez
Licencia
Distribuido bajo la licencia BSD 3-Clause. Ver LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/UPDerechoIA/up-law-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server