Skip to main content
Glama
himnishpersonal

contract-risk-analyzer

analizador-de-riesgos-de-contratos

Contract Risk Analyzer es un servidor FastMCP + flujo de trabajo de LangGraph que ingiere archivos PDF de contratos financieros, extrae cláusulas y obligaciones clave, marca términos de riesgo conocidos con su nivel de gravedad, compara versiones de contratos y sintetiza todo en un informe de riesgo estructurado para abogados, equipos de riesgo y operadores que necesitan una clasificación rápida y explicable de contratos.

Las herramientas MCP aceptan un file_path local o una pdf_url remota. Para implementaciones alojadas como Railway, utilice pdf_url para que el servidor pueda descargar el PDF en un almacenamiento temporal antes del análisis.

Arquitectura (nivel superior)

PDF
  |
  v
FastMCP_Server
  |
  +--> extract_clauses
  +--> flag_risk_terms
  +--> summarize_obligations
  +--> compare_contracts
  |
  v
LangGraph_Agent (orchestrates tools)
  |
  v
RiskBrief (Pydantic structured output)

Configuración (local)

cd contract-risk-analyzer
cp .env.example .env
source .venv/bin/activate  # if you already created the project virtualenv
pip install -e ".[dev]"
python -m contract_risk_analyzer.server
  • Punto de conexión MCP: http://localhost:8000/mcp

  • Comprobación de estado: http://localhost:8000/health

  • El archivo .env debe contener OPENAI_API_KEY.

Conexión desde Claude Desktop (cliente MCP)

Opción A: Ejecutar como servidor STDIO local (Claude Desktop lo inicia)

En Claude Desktop, añada una entrada de servidor MCP similar a:

{
  "mcpServers": {
    "contract-risk-analyzer": {
      "command": "python",
      "args": ["-m", "contract_risk_analyzer.server"],
      "env": {
        "OPENAI_API_KEY": "YOUR_KEY_HERE"
      }
    }
  }
}

Opción B: Conectar al servidor HTTP local

Si ejecuta el servidor usted mismo (python -m contract_risk_analyzer.server), conecte Claude Desktop al punto de conexión HTTP MCP local con mcp-remote:

{
  "mcpServers": {
    "contract-risk-analyzer": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "http://127.0.0.1:8000/mcp",
        "--allow-http"
      ]
    }
  }
}

Opción C: Conectar al servidor de Railway implementado

El servidor implementado está disponible en:

  • Comprobación de estado: https://contract-risk-analyzer-production-410a.up.railway.app/health

  • Punto de conexión MCP: https://contract-risk-analyzer-production-410a.up.railway.app/mcp

Configuración de Claude Desktop:

{
  "mcpServers": {
    "contract-risk-analyzer": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://contract-risk-analyzer-production-410a.up.railway.app/mcp"
      ]
    }
  }
}

Ejemplo de llamadas a herramientas

Reglas de fuente de entrada

Para herramientas de contrato único, proporcione exactamente uno de:

{
  "file_path": "/app/samples/contract.pdf"
}

o:

{
  "pdf_url": "https://example.com/contracts/contract.pdf"
}

Para compare_contracts, proporcione exactamente una fuente para cada lado:

{
  "pdf_url_a": "https://example.com/contracts/v1.pdf",
  "pdf_url_b": "https://example.com/contracts/v2.pdf"
}

Los PDF remotos se descargan en un almacenamiento temporal, con un límite de 50 MB por PDF, y se eliminan después de cada llamada a la herramienta.

extract_clauses

Entrada:

{
  "pdf_url": "https://example.com/contracts/isda.pdf",
  "clause_type": "termination events"
}

Ejemplo de salida:

[
  {
    "section_name": "ARTICLE_VII TERMINATION",
    "clause_type": "termination events",
    "raw_text": "…",
    "plain_english": "…",
    "page_references": [12, 13]
  }
]

flag_risk_terms

Entrada:

{ "pdf_url": "https://example.com/contracts/isda.pdf" }

Ejemplo de salida:

[
  {
    "term": "cross-default",
    "context": "…",
    "risk_explanation": "…",
    "severity": "high",
    "page_reference": 9
  }
]

summarize_obligations

Entrada:

{ "pdf_url": "https://example.com/contracts/isda.pdf" }

Ejemplo de salida:

[
  {
    "party": "Borrower",
    "obligations": ["Deliver monthly financial statements…"],
    "key_deadlines": ["Within 30 days after month-end…"],
    "conditions": ["So long as no Event of Default has occurred…"]
  }
]

compare_contracts

Entrada:

{
  "pdf_url_a": "https://example.com/contracts/v1.pdf",
  "pdf_url_b": "https://example.com/contracts/v2.pdf"
}

Ejemplo de salida:

{
  "added_clauses": ["New collateral top-up requirement…"],
  "removed_clauses": ["Removed cure period for payment default…"],
  "materially_changed_clauses": [
    {
      "section_name": "ARTICLE_IV EVENTS_OF_DEFAULT",
      "change_summary": "Acceleration now triggers immediately…",
      "risk_note": "Increases lender leverage; reduces borrower flexibility."
    }
  ],
  "risk_delta": "Overall risk increased for Borrower due to tighter default/acceleration terms."
}

Implementación (Railway)

  • Compilación: Railway compilará el contenedor desde Dockerfile.

  • Ejecución: El contenedor ejecuta python -m contract_risk_analyzer.server y se vincula a $PORT (predeterminado 8000).

  • Comprobación de estado: GET /health devuelve {"status":"ok"}.

  • Entorno: Establezca OPENAI_API_KEY en las variables de servicio de Railway.

  • Implementación actual: https://contract-risk-analyzer-production-410a.up.railway.app.

Stack tecnológico

  • FastMCP

  • OpenAI GPT-4o (vía SDK openai)

  • PyMuPDF (pymupdf)

  • Pydantic

  • LangGraph

  • Docker

  • Railway

F
license - not found
-
quality - not tested
C
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/himnishpersonal/contract-risk-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server